2016-08-09 23 views
5

Mam kolejkę JMS. Po otrzymaniu wiadomości należy ją zapisać do DB. Następnie, w zależności od pewnych warunków, chcę wysłać tę wiadomość do usługi strony trzeciej o stałej stawce, więc używam dławienia.Apache Camel. Część przepustnicy na trasie

Mam następującą trasę:

from("jms:queue") 
      .bean(persistingListener) 
      .choice() 
       .when(some condition ..) 
        .throttle(5) 
        .asyncDelayed() 
        .bean(thirdPartyServiceClient) 
      .endChoice(); 

Jednak cała trasa zostanie zdławiony, a nie części dotyczącej trzeciej klienta usług stroną. Mam na myśli to, że jeśli ustawię 100 wiadomości w kolejce, tylko pierwsze 5 zostanie odczytane. Tak więc w takim przypadku przetwarzanie wiadomości, które nie wymagają usługi strony trzeciej, jest opóźnione.

Jakieś pomysły dotyczące sposobu ograniczania przepustowości tylko w części związanej z usługami osób trzecich?

góry dzięki

+0

Czy jest szansa, że ​​twój stan jest zawsze prawdziwe? Powinieneś również określić okno czasowe. – alobodzk

+0

@alobodzk, cóż, nie ma takiej szansy i myślę, że to nie ma znaczenia. Domyślnie okno czasu przepustnicy jest ustawione na 1 sekundę. – StasKolodyuk

+0

Ustaw wartość asyncConsumer = true na punkcie końcowym JMS. Zobacz jego dokumenty: http://camel.apache.org/jms –

Odpowiedz

2

Punkt końcowy JMS działa w trybie domyślnie gdzie każdy JMS wiadomości są przetwarzane w kolejności. Jeśli chcesz zezwolić na przetwarzanie komunikatów (poza kolejnością) z powodu przetwarzania asynchronicznego, musisz włączyć tę opcję, konfigurując asyncConsumer=true na punkcie końcowym.

Zobacz więcej szczegółów w dokumentacji JMS: http://camel.apache.org/jms

Powiązane problemy