我想知道是否可以使用Coldfusion示例ActiveMQ事件网关订阅多个主题。
目前我可以设置
destinationName=dynamicTopics/topic1
但是我会假设我可以设置某种复合目的地
destinationName=dynamicTopics/topic1,topic2
或
destinationName=dynamicTopics/topic1,dynamicTopics/topic2
这似乎不起作用。这是不是开箱即用,或者我错过了JNDI的工作方式?
显然,替代方案是创建多个事件网关,但我根本不喜欢这个想法。
在 onIncomingMessage 处理程序中访问传入消息的主题名称也很重要
答案 0 :(得分:1)
我在单个ActiveMQ事件网关中容纳多个目的地的方式是使用" action"作为我的资格赛。我没有拥有多个队列或主题,而是将目标包含在我的有效负载中,如:
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等单独进行单元测试。