3

我想知道是否可以使用 Coldfusion 示例 ActiveMQ 事件网关来订阅多个主题。

目前我可以设置

destinationName=dynamicTopics/topic1

但是我会假设我可以设置某种复合目的地

destinationName=dynamicTopics/topic1,topic2

或者

destinationName=dynamicTopics/topic1,dynamicTopics/topic2

这似乎不起作用。这只是不可能开箱即用,还是我错过了有关 JNDI 工作原理的一些信息?

显然,另一种选择是创建多个事件网关,但我根本不喜欢这个想法。

在onIncomingMessage处理程序中访问传入消息的主题名称也很重要

4

1 回答 1

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 等工具自行进行单元测试。

于 2016-05-04T03:44:48.107 回答