2011-11-29 18 views
5

Ben ileti deposu olarak KahaDB ile ActiveMQ'yu 5.4 kullanıyorum. Dayanıklı aboneye sahip olan bir konu, için (Dayanıklılık için de geçerlidir) yayın mesajları, kalıcılık deposu hatta mesajları artarken abone gönderilir. Bu yüzden mesaj deposu doluyor ve daha fazla mesaj kabul etmiyor diye bir soruna neden oluyor.ActiveMQ KahaDB Sebat Mağaza Tam

Benim soru Sebat mağaza bile mesajlar sevk alıyorsanız, KahaDB mesajları atarak değil neden?

Selamlar,

Srinivas

cevap

8

Ne görüyorsanız ActiveMQ message store davranış ve durable subscriptions on topics için o arasındaki bir etkileşimdir.

Eğer dayanıklı abonelikleri var

, bir konu ( Connection ayarlanmış) her abonenin clientid için kuyrukta gibi muamele edilir. Mantık, istemcinin bağlantıyı keserken herhangi bir mesajı kaçırmamak istemesidir. Böylece bağlantı kesilirse, dayanıklı abonelik askıda kalıyor ve mesajları canlı tutuyor. o mesajı günlüğüm için

AMQ ileti deposu veri kayıtlarını kullanır. Bunlar ardışık olarak yazılır ve asla çıkarılmaz (rasgele erişim gerektirir). Hangi mesajların tüketildiğini takip eden ikinci bir dosya var. Bir veri dosyasındaki tüm iletiler tükendiğinde, bu dosya silinir.

Peki görüyoruz veri dosyasındaki mesajlardan bazıları bu dayanıklı abonelikler tarafından tüketilen ve sadece asılı edilmiyor olmasıdır. Sürekli olarak kullanılmayan dayanıklı aboneler için ClientIds bu soruna neden olur. Kök nedenini izlemenize yardımcı olması gereken aracıları denetlemek için JMX kullanıyorsanız, özelliğin kullanıldığı şekilde yanlış bir şey olması muhtemeldir. Genel bir kural olarak, dayanıklı bir abonelik kullanmak isteyebileceğinizi düşündüğünüzde, virtual topics kullanın, bunlar hakkında mantık, denetim ve yük dengesi çok daha kolaydır. Sadece sen kaçırmış olabilir tüm mesajların yerine bir konu abonesi yeniden bağlandığınızda mesajlar son birkaç almak istiyorsanız Öte yandan, retroactive consumers kullanın.

Bu sorunu aşmanın kolay bir yolu, bir ileti gönderdiğinizde her zaman use a time to live olacaktır - hemen hemen her kullanım durumunda, bir iletinin neden her zaman tüketilmesi gerektiğine dair bir zaman sınırı vardır. ActiveMQ, bu noktanın ötesinde mesajların geçerliliğini kaybedecek ve silinecek veri dosyalarındaki iletileri serbest bırakacaktır.

İlgili konular