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