我正在处理一些用Python和Java编写的不同服务。现在,我需要这些服务相互通信,ActiveMQ似乎是一个明智的选择。
然而,我不太清楚ActiveMQ提供的不同协议的概念。主要问题是,我是否必须实现所有服务以使用相同的访问总线协议?
是否可以同时使用多个不同的连接协议运行同一个总线?
如果问题1的答案是肯定的,那么仅仅连接到总线由协议控制,还是选择协议也会影响实际消息内容的类型。即,是否可以从Java JMS提交一个主题消息,并使Python STOMP客户端正确读取该消息?
不同客户端可以使用相同的协议进行语言间互操作,例如Java使用JMS,C++使用CMS,.NET使用NMS(当涉及OpenWire时)。我认为目前并没有很好的OpenWire Python客户端,除了一些CMS包装器。
另一方面,ActiveMQ在不同协议之间建立桥梁非常出色,以便它们可以共享相同的队列/主题。它可以很好地读取从OpenWire / JMS发送的stomp、MQTT和AMQP消息。请注意,您可能希望避免使用诸如MapMessage等JMS的高级功能,依赖特定的JMS头,并坚持简单的文本消息或字节消息。该桥梁并不是100%透明的,但正如我所说,它做得非常好。
因此,您可以选择使用stomp甚至AMQP 1.0,这里有来自Microsoft的一些指导here。