2017-01-16 9 views
0

Ich habe ein Szenario,Routing-Logik in ActiveMQ zu bestimmten Worker-Pool

Ich habe die gleiche Warteschlange für SMS und E-Mails konfiguriert.

Ich möchte, dass ActiveMQ die Nachricht an bestimmte Consumer-Pool weiterleiten, d. H. Wenn es eine SMS ist, muss es an einen Pool von Worker-Threads für SMS weitergeleitet werden.

Also, wenn ich die Anzahl der SMS erhöhen muss, dann muss ich nur die Poolgröße von SMS Worker Pool und nicht für EMAIL Worker Pool erhöhen.

Kann ich Apache Camel verwenden, um die Routing-Logik für meine Anforderung zu implementieren?

+0

Kann Dokumentation verweisen - http://camel.apache.org/message-router.html, http://camel.apache.org/content-based-router.html –

Antwort

0

Es gibt eine Reihe von Möglichkeiten, dies zu unterstützen:

  1. Stellen Sie einen Header auf jede Nachricht, so dass die Verbraucher JMS-Selektoren verwenden können, um die Nachrichten zu filtern.

  2. Verwenden Sie ein virtuelles Ziel innerhalb des ActiveMQ-Broker (der Broker auf Message-Header-Wert basiert Filter kann): http://activemq.apache.org/virtual-destinations.html

  3. eine Camel-Broker Komponente Verwenden Sie eine benutzerdefinierte Interceptor-Handler zu schreiben: http://activemq.apache.org/broker-camel-component.html

  4. Verwenden ein Camel Nachrichtenrouter oder Content-based-Router wie Nayan vorgeschlagen

  5. Verwenden Sie separate Warteschlangen pro Nachrichtentyp (dh Warteschlange: // OUTBOUND.SMS, Warteschlange: //OUTBOUND.EMAIL ..)

Jeder hat Vorteile und Kompromisse. # 1, # 4 und # 5 erfordern keine serverseitige Konfiguration, was praktisch ist, um die Wartung des Brokers so gering wie möglich zu halten.

+0

Danke Matt :-) So habe ich entschied sich, virtuelle Destinationen zu verwenden – Sabya

+0

Danke, Sabya. Freut mich zu hören, dass du unterwegs bist. Willst du bitte meine Antwort "akzeptieren"? –