JMS Konu - Kuyruklar


191

Bir JMS Kuyruğu ve JMS Konusu arasındaki farkın ne olduğunu merak ediyordum.

ActiveMQ sayfası diyor

Başlıklar

JMS'de bir Konu, semantik yayınlama ve abone olma anlamını uygular . Bir iletiyi yayınladığınızda, ilgilenen tüm abonelere gider; bu nedenle birçok aboneye sıfır, iletinin bir kopyasını alır. Yalnızca aracının iletiyi aldığı sırada etkin bir aboneliği olan aboneler iletinin bir kopyasını alır.

Kuyruklar

Bir JMS Kuyruğu yük dengeleyici semantiği uygular . Tek bir mesaj tam olarak bir tüketici tarafından alınacaktır. İletinin gönderildiği sırada kullanılabilir tüketici yoksa, iletiyi işleyebilecek bir tüketici bulunana kadar saklanır. Bir tüketici bir mesaj alırsa ve kapatmadan önce onaylamazsa, mesaj başka bir tüketiciye geri gönderilir. Bir kuyruk, mesajların mevcut tüketiciler arasında dengelenmiş olduğu birçok tüketiciye sahip olabilir .

Mesajın ActiveMQ aracısı tarafından alındığı sırayla her aboneye iletinin bir kopyasını ne gönderecek 'bir şey' istiyorum.

Düşüncesi olan var mı?

Yanıtlar:


147

Bu bir konunun uygun olduğu anlamına gelir. Sıra, bir mesajın yalnızca bir aboneye gittiğini gösterir. Her aboneye bir konu gider.


4
Herhangi bir fikir JMS veya WSO2 MB Kuyruklar için yük dengeleme nasıl çalışır?
Kulasangar

bu ilginç çünkü bazı aboneleri hata ayıklamaya çalışıyordum ve bir konu gönderirken abone çağrılmadı ancak kuyruğa gönderirken işe yaradı
vmrvictor

54

Konular yayıncı-abone modeli için, sıralar noktadan noktaya içindir.


31

Bir JMS konu dağılımının bir 1-çok modelde hedef türüdür. Yayınlanan aynı mesaj tüm tüketen aboneler tarafından alınır . Buna 'yayın' modeli de diyebilirsiniz. Bir konuyu, dağıtılmış hesaplama için bir Gözlemci tasarım modelindeki bir Konunun eşdeğeri olarak düşünebilirsiniz . Bazı JMS sağlayıcıları bunu TCP yerine UDP olarak uygulamayı tercih eder. Konu için ileti teslimi 'ateşle ve unut'tur - kimse dinlemezse, mesaj kaybolur. İstediğiniz bu değilse, 'kalıcı abonelikleri' kullanabilirsiniz.

Bir JMS sıra mesajlarının bir 1-to-1 yer. İleti, alıcı alıcılardan yalnızca biri tarafından alınır (lütfen unutmayın: 'konu istemcisi için alıcılar ve kuyruk istemcisinin alıcıları için sürekli olarak abone kullanmak karışıklığı önler). Bir kuyruğa gönderilen mesajlar, birisi tarafından alınana veya süresi dolana kadar diskte veya bellekte saklanır. Bu nedenle kuyruklar (ve kalıcı abonelikler) bazı aktif depolama yönetimine ihtiyaç duyar, yavaş tüketicileri düşünmeniz gerekir.

Çoğu ortamda, tartışmak isterim, konular daha iyi bir seçimdir, çünkü mimariyi değiştirmek zorunda kalmadan her zaman ek bileşenler ekleyebilirsiniz. Eklenen bileşenler izleme, günlüğe kaydetme, analiz vb. Olabilir. Projenin başında 1 yıl, 5 yıl, 10 yıl içinde gereksinimlerin nasıl olacağını asla bilemezsiniz. Değişim kaçınılmaz, kucakla :-)


28

Bu kadar basit:

Kuyruklar = Ekle> Çek (tek aboneye gönder) 1: 1

Konular = Ekle> Yayın (tüm abonelere gönder) 1: n

resim açıklamasını buraya girin


2
Basit bir sosyal ağ için örnek verilebilir. Birisi bir gönderiyi 'seviyor'. Arka uç konuya bir 'POST LIKE' etkinliği yayınlıyor. 3 abone tarafından tüketilir: notificationProcessor(postere bir bildirim gönderir), karmaProcessor(liker ve postere karma verir), feedProcessor(notları insanların yayınlarına taşır). Elbette hepsi eşzamansız.
Siddhartha

@Siddhartha, bu cevaplanmış bir örnek olabilir, teşekkürler!
selem mn


7

Kuyruklar

Artıları

  • Şeffaf iletişim akışı ile basit mesajlaşma düzeni
  • Mesajlar tekrar kuyruğa alınarak kurtarılabilir

Eksileri

  • Yalnızca bir tüketici mesajı alabilir
  • Birebir ilişki olduğu için üretici ve tüketici arasında bir bağlantı anlamına gelir

Başlıklar

Artıları

  • Birden fazla tüketici bir mesaj alabilir
  • Üretici ve tüketiciler arasında ayırma (yayınlama ve abone olma modeli)

Eksileri

  • Daha karmaşık iletişim akışı
  • Tek bir dinleyici için mesaj kurtarılamaz

4

N tüketiciniz varsa:

JMS Konuları N N iletilerini teslim JMS Konuları N N iletilerini teslim

"İletinin bir kopyasını her aboneye iletinin ActiveMQ aracısı tarafından alındığı sırayla gönderecek bir" şey "olmasını istediğinizi söylediniz.

Bu nedenle, tüm N abonesinin iletinin bir kopyasını alması için bir Konu kullanmak istiyorsunuz.


1

BAŞLIK :: konu bir çok iletişim ... (çoklu nokta veya yayınla / abone ol) EX: -Bir yayıncı filmi youtub'da yayınlar, sonra tüm aboneleri bildirim alır .... QUEVE :: queve bire -bir iletişim ... Örn: -şarj için bir istek yayınlayın zaman sadece bir qreciever gidecek ... her zaman istek tüm qreceivers goto gidip sonra bir uygulama için uygun analiz geliştirilirken çoklu şarj oldu her zaman hatırlıyorum


-1

Kuyruk, abonelerin tüketmesini bekleyen mesajları tutmak için kullanılan JMS tarafından yönetilen bir nesnedir. Tüm aboneler iletiyi kullandığında, ileti kuyruktan kaldırılır.

Konu, bir konuya tüm abonelerin mesaj yayınlandığında aynı mesajı almasıdır.


2
Kuyruk mesajları tek bir tüketici tarafından yalnızca bir kez tüketilir , bu nedenle kuyruk yük dengeleyicisini uygular. Konu abonelikleri kalıcı olabilir : abone yayınlandıktan çok sonra mesajı alabilir (örneğin abone kapatılıp tekrar gelirse).
Gruber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.