Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 13505|Yanıt: 2

ActiveMQ kalıcı abonelik ayarları

[Bağlantıyı kopyala]
Yayınlandı 9.01.2017 11:12:10 | | |

ActiveMQ kalıcı abonelik ayarları
Yayıncı için PERSISTENT teslimat modunu ayarlayarak, aboneler için kalıcı abonelikler kullanabilirsiniz; bu da Pub/Sub programının tüm yayınlanmış mesajları almasını garanti eder.
Mesaj abonelikleri, kalıcı olmayan abonelikler ve kalıcı abonelikler olarak ayrılır; kalıcı olmayan abonelikler yalnızca istemci aktifken, yani istemci çevrimdışı olduğunda, konuya gönderilen mesajlar kaybolur ve asla alınmaz. İstemci çevrimdışı olduğunda, ActiveMQ kendi kimliğine göre konnaya gönderilen tüm mesajları kaydeder ve istemci tekrar ActiveMQ'ya bağlandığında, çevrimdışı olduğunda ona gönderilen tüm mesajları alır. Sürekli abonelikler genel giderleri artırır ve aynı anda sadece bir aktif kullanıcı kalıcı abonelikte olur. Kalıcı abonelik kurmanın adımları:
1. Bağlantı için bir müşteri kimliği oluşturun;
2. Abonelik konusu için bir abonelik adı belirtin;
Yukarıdaki kombinasyon benzersiz olmalı.
Kod, kalıcı abonelikleri uygular

(1) Kuyruk kullanıldığında, yani sıraya girerken, her mesaj için sadece bir tüketici olur, bu yüzden kalıcı olmak çok basittir, sadece veritabanına kaydedin

。 Sonra, herhangi bir tüketici onu alıp elden çıkarabilir. Bir tüketici bir süreliğine kapatsa da fark etmez.

(2) Konu kullanıldığında, yani abone olunca her mesajın birden fazla kullanıcısı olabilir ki bu da daha sorunludur.

Birincisi, tüketicilerin sıradan tüketici olduğunu varsayarsak,
------------------------
<1> lansmanından sonra activemq piyasaya sürüldü, haber 1 yayınlandı, ancak ne yazık ki artık hiçbir tüketici başlamadı, yani abone olmadı. Yani

, haber terk edildi.

<2> Tüketici 1 başladı, activemq'ya bağlandı, abone oldu ve mesaj bekledi~~

activemq mesaj 2 gönderiyor, tamam, tüketici 1 mesajı alıyor ve işliyor. Mesajın terk edilmesi.

<3> Tüketici 2 de açıldı, activemq'ya bağlı, abone oldu ve bir mesaj bekliyor~~

activemq mesaj 3, OK, tüketici 1, tüketici 2 mesajlarını yayınlar, hepsi alınır ve işlenir. Mesajın terk edilmesi.

<4> Tüketici 1 kapalı.

activemq mesaj 4 gönderiyor, tamam, tüketici 2 mesajı alıyor ve işliyor. Mesajın terk edilmesi.

<5> Tüketici 1 yeniden başladı.

activemq mesajlar 5, OK, tüketici 1 ve tüketici 2 mesajlarını alır ve işler. Mesajın terk edilmesi.
-----------------------------
Özetle:
ActiveMQ sadece şu anda piyasaya sürülen tüketiciye mesaj gönderir.
Kapatan tüketiciler birçok mesajı kaçırır ve onları tekrar alamayacaklar.

Gönderilen mesaj önemli kullanıcı senkronizasyonu verisse ve kaçırıyorsa, kullanıcı veri senkronize edilmez.

Peki, tüketiciler yeniden başlattıklarında kaçırılan mesajları nasıl alırsınız?

Cevap ise kalıcı bir abonelik.
-----------------------------

Sıradan abonelikler, tüketicileri ayırt etmeden, mekanda birkaç kişi varsa, birkaç buharda pişirilmiş çörek atar.
Sürekli abonelikler için tüketicinin adını kaydetmeniz gerekir.
Zhang San, ben Zhang San'ım, benim için buharda pişirilmiş çörekler var, geri gelip alacağım.
Li Si dedi ki, ben Li Si'yim, benim için buharda pişirilmiş çörekler var, geri gelip alacağım.
activemq, Zhang San ve Li Si'nin isimlerini yazdı.

Buharda pişirilmiş çörekleri bölerken, bir baş yine buharda pişirilmiş çörek verir.
Bölünmeden sonra, Zhang San'ın konuşmadığını görünce, onun orada olmadığı anlamına geliyordu, ona bir tane bırak.
Li Si konuştu, bu yüzden kalmasına gerek yoktu.

Zhang San geri döndü, activemq aradı ve baktı, bu Zhang San değil, buharda pişirilmiş çöreklerini hemen getir.
Bir buharda pişirilmiş çörek olabilir, ya da 100 buharda pişirilmiş çörek olabilir, Zhang San'ın bir süreliğine ayrıldığından beri kaç buharda pişirilmiş çöreği böldüğüne bağlı.

activemq, tüketicileri clientID ve abone adıyla ayırır.
-----------------------------
Bir bağlantı kur
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); Sürekli abonelikler için bunu ayarlamak gerekir.
connection.start();

Bir oturum oluşturun
Oturum oturumu = connection.createSession(yanlış,Session.AUTO_ACKNOWLEDGE);

Bir varış noktası oluşturun
Konu konusu = session.createTopic("userSyncTopic"); Konu adı

MessageConsumer = session.createConsumer(topic); Düzenli abonelik
MessageConsumerConsumer = session.createDurableSubscriber(topic,"bbb"); Kalıcı abonelikler


Bir diğer nokta ise, mesaj üreticisinin mesaj gönderirken kalıcı mod kullanmasıdır
MessageProducer yapımcı = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Eğer değilse, varsayılan olarak kalıcı olur

(5) Aynı "clientID" kullanılırsa, aynı tüketici olarak kabul edilir. İki program aynı "clientID"yi kullanıyorsa, aynı anda sadece biri activemq'ya bağlanabilir ve ikinci bağlantı hata bildirir.

(6) activemq ayarları conf/activemq.xml içinde ve varsayılan mesajlar data/kahadb içinde kaydedilir; activemq yeniden başlatıldığında mesajlar kaybolmaz.

Mevcut kuyruklar, konular ve kalıcı aboneler hakkında bilgileri http://localhost:8161/admin/index.jsp erişebilir, mesaj gönderebilir ve daha fazlasını yapabilirsiniz.

İçeriği activemq-jdbc.xml kopyalayıp değiştirebilir ve mesajı diğer veritabanlarına kaydedebilirsiniz.




Önceki:360 bilet kapan beşinci nesil VIP kanalı kırıldı, hızla VIP sırasına girdi
Önümüzdeki:. .Net platformu
 Ev sahibi| Yayınlandı 9.01.2017 13:41:53 |
1 Kuyruk ve konunun teknik özelliklerinin karşılaştırılması
ad
Konu
Kuyruk
Genel Bakış
Mesajları Yayınla Abone Mesajları Abonelik mesajlarını yayınla
Noktadan Noktaya Noktadan Noktaya
Devlet yok
Konu verisi varsayılan olarak durumsuzdur.
Kuyruk verisi varsayılan olarak MQ sunucusunda dosya olarak kaydedilir; örneğin, Aktif MQ genellikle $AMQ_HOME\data\kr-store\data altında saklanır. Ayrıca veritabanı deposu olarak da yapılandırılabilir.
Bütünlük garantisi
Yayıncı tarafından yayımlanan her verinin abone tarafından kabul edileceği garantisi yoktur.
Kuyruk her verinin alıcı tarafından alınabileceğini garanti eder.
mesajın kaybolup olmayacağı
Genel olarak, bir yayıncı bir konuya mesaj yayımladığında, sadece konu adresini dinleyen alt forum mesajı alabilir. Eğer alt dinleyici yoksa, konu kaybolur.
Gönderici hedef Kuyruk'a bir mesaj gönderir ve alıcı bu Kuyruk üzerindeki mesajları asenkron olarak alabilir. Kuyruk üzerindeki mesajlar, şimdilik onları alacak alıcı yoksa kaybolmaz.
Mesaj yayınlama kabul politikası
Bire çok mesaj yayınlama ve alma politikası, aynı konu adresini dinleyen birden fazla alt grup, yayıncı tarafından gönderilen mesajları alabilir. Alt forum, bildirimi mq sunucusuna alır
Bire bir mesaj yayınlama ve alma politikaları, gönderen tarafından gönderilen mesajlar yalnızca bir alıcı tarafından alınabilir. Alıcı aldıktan sonra, MQ sunucusu MQ sunucusuna mesajın alındığını bildirir ve MQ sunucusu kuyruk içindeki mesajları siler veya başka işlemler yapar.

 Ev sahibi| Yayınlandı 9.01.2017 13:42:15 |
Konu ile kuyruk arasındaki en büyük fark, bu konunun yayın şeklinde olmasıdır; tüm çevrimiçi dinleme istemcilerine yeni bir mesaj olduğunu bildirir ve izleme olmadan istemci mesajı alamaz; Queue ise, birden fazla dinleme istemcisini eşler arası bir şekilde bilgilendirir.

2 Konu ve kuyruk yöntemleri arasındaki mesaj işleme verimliliğinin karşılaştırılması
        Dinleme istemcisinin eşdelik sayısını artırarak, dinleme istemcisinin eşzamanlılığının artması nedeniyle konunun mesaj itiştirmesinin önemli ölçüde azalıp azalmayacağını doğrulayın.
        Ölçülen sonuçlardan, bir abone ve 100 abone varsayımında konu yöntemiyle gönderilen mesajların gönderme ve alma verimliliğinde önemli bir fark yok, ancak 500 abone (iş başlığı) eşzamanlılığı varsayımında verimlilik farkı açıktır (500 iş parçacığı eşdeğeri nedeniyle, makinemin CPU kullanım oranı %70-90 arasında yükseliyor, bu yüzden yerel testimden kaynaklanan performans darboğazı mı yoksa konu mesajı gönderme yöntemindeki performans darboğazı mı olduğunu doğrulamak imkansızdır, bu da verimlilikte çok önemli bir düşüşe yol açıyordu).
        Bir abone ve 100 abone varsayımında konu yöntemi ve kuyruk moduyla gönderilen mesajların gönderme ve alma verimliliğinde önemli bir fark yoktur; ancak 500 abone eşzamanlı varsayımı altında, konu modunun verimliliği kuyruk modundan önemli ölçüde daha düşüktür.
        Kuyruk yöntemiyle gönderilen mesajların gönderme ve alma verimliliği, bir abone, 100 abone ve 500 abone varsayımında önemli ölçüde değişmez.
Konu ölçülü veriler:


Gönderen tarafından gönderilen toplam mesaj sayısı
Tüm abonelerin aldığı toplam mesaj sayısı
Mesaj gönderip almak için geçen ortalama süre
Tek abone
100
100
101ms
100 abone
100
10000
103ms
500 abone
100
50000
14162ms

Kuyruk ölçülü veriler:


Gönderen tarafından gönderilen toplam mesaj sayısı
Tüm abonelerin aldığı toplam mesaj sayısı
Mesaj gönderip almak için geçen ortalama süre
Tek abone
100
100
96ms
100 abone
100
100
96ms
500 abone
100
100
100ms

Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com