通过支持(C)Python和Java / JMS应用程序的消息代理进行通信的好方法是什么?我的特殊要求是:
我很难找到解决方案。 Apache的ActiveMQ没有开箱即用的Python支持。 ZeroMQ需要一个集合点。 RabbitMQ似乎不支持JMS。我找到的最佳候选者是ActiveMQ和pyactivemq库的组合。但是pyactivemq的第一个也是最后一个版本是在2008年,所以看起来它没有达到我的“无边缘”要求。
理想的答案是一个或多个支持良好且记录良好的开源软件包的名称,您个人习惯在Java / JMS和Python应用程序之间进行通信,并且不需要大量集成开始工作。答案包括“简单”(最多几天的工作)实施额外的胶水代码以满足上述所有要求,这是可以接受的。在缺乏优秀的开源候选人的情况下,商业解决方案也是可以接受的。
此外,Jython已经出局了。 (如果我能......)相同的Python应用程序将需要使用仅在CPython中可用的模块。
答案 0 :(得分:5)
JMS是一种不实现的规范。 RabbitMQ是一个真正的选择。
我也很高兴地使用了Jboss的HornetQ http://www.jboss.org/hornetq,因为它与Java EE的每一件事都更加一致,但如果你使用Spring,那么RabbitMQ将是特别的选择
答案 1 :(得分:4)
我很难找到解决方案。 Apache的ActiveMQ没有开箱即用的Python支持。
ActiveMQ代理完全支持开箱即用的Stomp协议。 Stomp是一种基于文本的消息传递协议,具有许多平台和语言的客户端。
ActiveMQ的文档应包含有关如何为stomp设置连接器的信息。在最简单的形式中,启用连接器看起来像:
<transportConnectors>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
</transportConnectors>
一旦在代理端启用,您就可以使用任何支持stomp的python库。然后,您可以在python端使用Stomp,在Java端使用JMS与代理进行通信以及从特定目标发送/接收。
答案 2 :(得分:1)
您可能需要查看OpenAMQ,然后再看一下RabbitMQ。
RabbitMQ和OpenAMQ使用的基础消息传递技术是AMQP。您应该能够轻松找到对这两个代理(以及表面上任何其他符合规范的代理)起作用的Python和Java客户端。
如果JMS是必备的,那么你可能能够在AMQP之上找到一个JMS客户端(OpenAMQ一次提供这样的客户端,但我不确定它的当前状态)。
答案 3 :(得分:1)
我们一直在使用GlassFish Message Queue(以前称为Sun Java MQ) - 它继承自OpenMQ
它满足您的大多数要求,如果不是全部的话。 我们一直在Red Hat Linux(RHEL)中使用失败的过度集群代理 - 它对于大量使用是可靠的。虽然有些'怪癖'潜伏在这里和那里。