Подписка на несколько тем 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.

Другие вопросы по тегам