Bazı iletileri JMS Kuyruğuna koyan bir üçüncü taraf uygulamasına sahibim. Ayrıca iletileri bu sıradan okuyan bir uygulama var. İletinin türüne bağlı olarak bu iletiyi DB'ye kaydediyorum veya üçüncü taraf hizmetine gönderiyorum. Ayrıca, üçüncü tarafa aşırı yüklenmemesi için ikinci sınır başına bazı sabit çağrıları aşmamalıyız.JMS Kuyruk Böl. Kurumsal Entegrasyon. Apache Camel
Şu anda bu kullanım durumu için aklıma iki çözüm geldi.
Birincisi, üçüncü şahsın bazı özel başlıklar göndermesini istemek, böylece JMS tüketicisi JMS Seçici'yi kullanarak iletileri filtreleyebilsin. Dolayısıyla, bu durumda iki tüketici oluşturabiliriz, birincisi mesajları okuyabilecek ve bunları DB'ye kaydedebilecek, ikincisi ise belirli bir yükte üçüncü tarafa mesaj göndermek için bazı kısıtlama/yoklama mekanizmasını kullanacaktır. . Ancak bu yaklaşım benim için çalışmaz çünkü üçüncü şahısların bu özel başlıkların eklenmesini bekler. Camel böyle bir şey:
from("jms:queue?selector=firstSelector")
.bean(dbSaver);
from("jms:queue?selector=secondSelector")
.throttle(10)
.bean(httpClient);
ikincisi başka iki JMS Kuyrukları ve bu sıralar arasında ileti bölecek bir işlemci yaratmaktır. Daha sonra ilk çözümdeki gibi aynı mantığı gider. Bununla birlikte, bu, 2 ekstra JMS sıralarının eklenmesi gerektiği anlamına gelir. Camel In: Ayrıca
from("jms:parentQueue")
.choice()
.when(body().contains(...))
.to("jms:fistChildQueue")
.otherwise()
.to("jms:secondChildQueue")
.end()
from("jms:fistChildQueue")
.bean(dbSaver);
from("jms:secondChildQueue")
.throttle(10)
.bean(httpClient);
, yerine JMS Kuyruklar iki bellek içi sıraları kullanmanın düşünüyordum. Ancak, bu durumda, JMS Kuyrukta çok sayıda mesaj olacaksa, bellekle ilgili sorunlara kolayca girebiliriz.
Bu kullanım durumu için mimari bir tasarım önerilebilir mi? Camel Route stilinde görmek harika olurdu.
İki ek sıraya sahip olmak çok da önemli değil, JMS aracıları binlerce kuyruğu işlemek için üretildi. Darius'un # 1 numaralı seçeneği, herhangi bir ek doldurma işlemi yapmak istemiyorsanız daha mantıklıdır. –