2016-01-21 57 views
0

我在探索ActiveMQ基于不同技术(C,Java,Ruby和Python)的异构应用程序之间的高级消息传递。在查看supported protocols时,我无意中了解了执行消息交换时混合协议的用例。我搜索了ActiveMQ文档,但无法找到任何此类参考资料来谈论这一点。使用Apache ActiveMQ混合协议

我的问题是,说 -

生产者(NewsPublisher)将发表新闻(体育,财经,世界)使用AMQP的话题(NewsTopic)。在发布之后,这个主题将这些消息存储在相应队列下(体育,金融和世界队列)。在这种情况下,订购体育队列的客户机是基于JMS的,另一个客户机订阅金融队列是基于Stomp的;这些客户是否可以通过NewPublisher接收使用AMQP发布的队列中的可用消息?

我在前面看到一个有点相关的问题posted但是发现与原始问题无关的答案,所以认为要仔细检查。

回答

0

在ActiveMQ中混合协议并不是那么困难,代理负责所有内部路由和消息从入站协议到外发位的转换,因此您不必担心太多。

您必须关注的是您的客户端组合允许您使用的消息类型的常见分母。在你的问题中,你列出了三种不同的协议AMQP,OpenWire和STOMP(我猜你所指的JMS是使用OpenWire的ActiveMQ JMS客户端)。

在这个混合STOMP是一个开始,因为它为message payload(文本和二进制)提供最少的选项,所以你需要从那里开始。你的信息可以限制在这两个领域吗?要从JMS客户端发送到STOMP,您可以将自己限制为JMS TextMessage和/或JMS BytesMessage。在AMQP中,您还需要将消息负载限制为基于文本的二进制负载(假设数据部分包含包含字节数组的二进制文件)。

ActiveMQ的STOMP协议处理程序确实提供了一些选项来从其他类型执行Message transformations,例如将MapMessage转换为基于JSON的字符串有效内容,但最好从简单的方式开始。

鉴于主题的广度有很多可以说,但这应该帮助你开始。总之,是的,你可以在不同的协议上混合使用客户端,但在ActiveMQ中你需要对这些限制有所了解。