通过消息代理进行Java / Python通信

时间:2011-07-01 18:16:25

标签: java python middleware unit-of-work messagebroker

通过支持(C)Python和Java / JMS应用程序的消息代理进行通信的好方法是什么?我的特殊要求是:

  • 开源解决方案
  • 可在基于Linux的系统上使用
  • 发送者和接收者之间不需要会合(即使用消息代理)
  • 单个事件队列支持多个生产者和消费者(只有一个消费者接收每条消息)
  • 两阶段提交的工作单元支持(XA支持很好)
  • 支持持久性消息(即在重新启动代理后仍然存在)
  • 支持JMS for Java客户端
  • 没有任何组件是“边缘”,意味着由于缺乏社区支持/兴趣而有可能失去维护
  • 如果有一个Python客户端设法“说JMS”会很棒,但是包含编写我自己的Python JMS层的任务的答案是可以接受的

我很难找到解决方案。 Apache的ActiveMQ没有开箱即用的Python支持。 ZeroMQ需要一个集合点。 RabbitMQ似乎不支持JMS。我找到的最佳候选者是ActiveMQ和pyactivemq库的组合。但是pyactivemq的第一个也是最后一个版本是在2008年,所以看起来它没有达到我的“无边缘”要求。

理想的答案是一个或多个支持良好且记录良好的开源软件包的名称,您个人习惯在Java / JMS和Python应用程序之间进行通信,并且不需要大量集成开始工作。答案包括“简单”(最多几天的工作)实施额外的胶水代码以满足上述所有要求,这是可以接受的。在缺乏优秀的开源候选人的情况下,商业解决方案也是可以接受的。

此外,Jython已经出局了。 (如果我能......)相同的Python应用程序将需要使用仅在CPython中可用的模块。

4 个答案:

答案 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)中使用失败的过度集群代理 - 它对于大量使用是可靠的。虽然有些'怪癖'潜伏在这里和那里。