Ana içeriğe geç

Pub/Sub

Yayın-Abonelik (Publish-Subscribe)

Okunuşu
pab sab
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/pub-sub

Kısaca

Pub/sub, yayıncıların konulara mesaj gönderdiği ve bir konunun her abonesinin, iki taraf da birbirini tanımadan bir kopya aldığı bir mesajlaşma kalıbıdır.

Pub/sub nedir?

Yayın-abonelik kalıbında yayıncı (publisher) adı verilen göndericiler mesajları belirli alıcılara göndermez. Bunun yerine her mesajı order.placed gibi bir konuya (topic; kanal da denir) yayımlar ve bir mesaj aracısı, o konuyla ilgilendiğini kaydeden her aboneye bir kopya teslim eder. Yayıncılar abonelerin kim olduğunu ya da kaç tane olduğunu bilmez, aboneler de kimin yayımladığını bilmez.

Bir çevrimiçi mağaza order.placed yayımladığında, e-posta servisi bir makbuz gönderir, envanter servisi stok ayırır ve analitik servisi satışı kaydeder; her biri bağımsız bir abonedir. Sadakat puanı servisi gibi yeni bir özellik eklemek, yayıncıyı hiç değiştirmeden bir abone daha eklemek demektir. Pub/sub; Redis, RabbitMQ, NATS, IoT cihazları için MQTT aracıları, Apache Kafka ve bulut sağlayıcılarının yönetilen mesajlaşma servisleri gibi aracılar ve platformlar tarafından sunulur.

Pub/sub bir dergi aboneliği gibi çalışır: yayıncı bir sayı çıkarır, abone olan herkes kendi kopyasını alır ve abone olmayanlar hiçbir şey almaz. Teslimat garantileri sistemler arasında çok değişir. Bazıları ateşle-ve-unut şeklindedir; çevrimdışı bir abone mesajı kaçırır. Diğerleri ise mesajları kalıcı olarak saklar, böylece aboneler döndüklerinde yetişebilir.

Pub/sub sıklıkla mesaj kuyruğu ve observer kalıbıyla karıştırılır. Mesaj kuyruğunda her mesaj tam olarak bir tüketici tarafından işlenir; bu, işi worker'lar arasında paylaştırmak için idealdir. Pub/sub ise her mesajı her aboneye teslim eder; birçok sistem ikisini birleştirir ve bir konu, abone olan servis başına bir kuyruğa dağılır. Observer kalıbı aynı fikrin süreç içi sürümüdür; nesneler tek bir program içinde başka bir nesnenin olaylarına abone olur. Pub/sub ise ortaya bir aracı koyar ve genellikle ağı aşar.

Bir bakışta

Bir çevrimiçi mağaza bir konuya order.placed mesajı yayımlar; o konuya abone olan e-posta, envanter ve analitik servislerinin her biri kendi kopyasını alır.yayımlarkopyakopyakopyaYayıncıçevrimiçi mağazaKonuorder.placedAbonelerE-posta servisimakbuz gönderirEnvanter servisistok ayırırAnalitik servisisatışı kaydeder
Yayıncı kimin dinlediğini bilmez: konunun her abonesi bir kopya alır ve yeni bir abone eklemek yayıncıyı hiç değiştirmez.

Önemli noktalar

  • Yayıncılar konulara mesaj gönderir ve bir konunun her abonesi bir kopya alır.
  • Yayıncılar ve aboneler birbirini bilmez; bu da servisleri gevşek bağlı tutar.
  • Yayıncıyı değiştirmeden yeni aboneler eklenebilir.
  • Teslimat garantileri değişir: bazı sistemler çevrimdışı aboneler için mesajları bırakır, bazıları saklar.
  • Kuyruk her mesajı bir tüketiciye gönderir; pub/sub ise tüm abonelere.

Örnek

Redis ile yayınlamak ve abone olmakjavascript
// Pub/sub with Redis, using the node-redis client
import { createClient } from "redis";

const publisher = createClient();
const subscriber = publisher.duplicate();
await Promise.all([publisher.connect(), subscriber.connect()]);

// Every service that subscribes to the channel gets its own copy
await subscriber.subscribe("order.placed", (message) => {
  const order = JSON.parse(message);
  console.log("Send receipt for order", order.id);
});

// The publisher doesn't know or care who is listening
await publisher.publish("order.placed", JSON.stringify({ id: 1001, total: 59.9 }));

Sık sorulan sorular

Pub/sub ile mesaj kuyruğu arasındaki fark nedir?

Mesaj kuyruğunda her mesaj bir tüketiciye gider; bu yüzden birkaç worker yükü paylaşabilir. Pub/sub'da ise her abone her mesajın kendi kopyasını alır; bu yüzden birkaç farklı servis aynı olaya tepki verebilir.

Kafka pub/sub midir?

Kafka pub/sub'ı destekler, çünkü birçok tüketici grubu aynı konuyu bağımsız olarak okuyabilir. Tek bir tüketici grubu içinde her bölüm (partition) yalnızca bir tüketici tarafından okunur; bu yüzden Kafka işi paylaştırmak için kuyruk gibi de davranabilir.

Bir abone çevrimdışıyken mesajlara ne olur?

Sisteme bağlıdır. Ateşle-ve-unut sistemler mesajı o abone için bırakır; kalıcı sistemler ise abone onaylayana ya da saklama süresi dolana kadar mesajı tutar.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar