Подписка на несколько тем ActiveMQ в шлюзе событий Coldfusion
Мне было интересно, смогу ли я использовать пример шлюза событий ActiveMQ в Coldfusion, чтобы подписаться на несколько тем.
В настоящее время я могу установить
destinationName=dynamicTopics/topic1
однако я бы предположил, что мог бы установить какой-то составной пункт назначения
destinationName=dynamicTopics/topic1,topic2
или же
destinationName=dynamicTopics/topic1,dynamicTopics/topic2
Это не похоже на работу. Это просто невозможно из коробки, или я что-то упускаю из-за того, как работает JNDI?
Очевидно, что альтернативой является создание нескольких шлюзов событий, но мне эта идея вообще не нравится.
Также было бы важно иметь доступ к имени темы входящего сообщения в обработчике onIncomingMessage.
1 ответ
Способ размещения нескольких адресатов в одном шлюзе событий ActiveMQ - использовать "действие" в качестве моего квалификатора. Вместо того, чтобы иметь несколько очередей или тем, я включаю цель в свою полезную нагрузку, например:
payload = {action: "notify", foo: "bar"};
sendGatewayMessage('gw', {status = "SEND",
topic="dynamicTopics/sync",
message = serializeJson(payload)});
Затем в onIncomingMessage я разветвляюсь на основе действия:
<cffunction name="onIncomingMessage">
<cfargument name="event" type="struct" required="true" />
<cfset var msg = deserializeJson(arguments.event.data.msg) />
<cfif msg.action EQ "verify">
<cfset verify(argumentCollection = msg) />
<cfelseif msg.action EQ "notify">
<cfset notify(argumentCollection = msg) />
</cfif>
</cffunction>
И я использую частные методы для реализации каждой из подпрограмм по мере необходимости. Бонус вытаскивания кода из onIncomingMessage, он может быть реализован в отдельном CFC, который может быть проверен модулем самостоятельно, используя что-то вроде MxUnit или TestBox.