Jms 使用ApacheActiveMQ时混合协议

Jms 使用ApacheActiveMQ时混合协议,jms,activemq,redhat,amqp,Jms,Activemq,Redhat,Amqp,我正在探索ActiveMQ,以便在基于不同技术(C、Java、Ruby和Python)的异构应用程序之间实现高级消息传递。在查看时,我无意中理解了在执行消息交换时混合协议的用例。我搜索了ActiveMQ文档,但找不到任何关于这方面的参考资料 我的问题是,比如说- 制作人(NewsPublisher)使用AMQP将新闻(体育、金融、世界)发布到主题(NewsTopic)。发布后,本主题将这些新闻存储在各自的队列(体育、金融和世界队列)中。在这种情况下,订阅体育队列的客户端基于JMS,订阅金融队列的

我正在探索ActiveMQ,以便在基于不同技术(C、Java、Ruby和Python)的异构应用程序之间实现高级消息传递。在查看时,我无意中理解了在执行消息交换时混合协议的用例。我搜索了ActiveMQ文档,但找不到任何关于这方面的参考资料

我的问题是,比如说-

制作人(NewsPublisher)使用AMQP将新闻(体育、金融、世界)发布到主题(NewsTopic)。发布后,本主题将这些新闻存储在各自的队列(体育、金融和世界队列)中。在这种情况下,订阅体育队列的客户端基于JMS,订阅金融队列的客户端基于Stomp;这些客户端能否接收NewPublisher使用AMQP发布的队列上可用的消息


我在前面看到了一个有点相关的问题,但发现答案与原来的问题无关,所以我想再检查一遍

在ActiveMQ中混合协议并不是那么难,代理负责所有内部路由和消息从传入协议到传出位的转换,因此您不必太担心这一点

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

在这个混合模式中,STOMP是一个开始,因为它为(文本和二进制)提供了最少的选项,所以您需要从这里开始。您可以将邮件限制到这两个域吗?要从JMS客户机发送到STOMP,您可以将自己限制为JMS文本消息和或JMS字节消息。在AMQP中,您还需要将消息有效负载限制为二进制的基于文本的有效负载(考虑包含封装字节数组的二进制的数据部分)

ActiveMQ的STOMP协议处理程序确实提供了一些其他类型的选项,例如将MapMessage转换为基于JSON的字符串负载,但最好从简单开始,然后逐步升级

鉴于主题的广度,还有很多可以说的,但这应该有助于你开始。简言之,是的,您可以在ActiveMQ中很好地混合使用不同协议上的客户端,但您确实需要了解这样做的局限性