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

wbe*_*rry 13 python java middleware unit-of-work messagebroker

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

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

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

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

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

Sha*_*zeb 5

JMS是一种不实现的规范.RabbitMQ是一个真正的选择.

我也很高兴地使用了来自Jboss的HornetQ http://www.jboss.org/hornetq,因为它与Java EE的所有内容更加一致,但如果你使用Spring,那么RabbitMQ将是特别的选择.


wha*_*ley 4

我很难找到解决方案。Apache 的 ActiveMQ 不提供开箱即用的 Python 支持。

ActiveMQ 代理完全支持使用开箱即用的 Stomp 协议。Stomp 是一种基于文本的消息传递协议,拥有适用于多种平台和语言的客户端。

ActiveMQ 的文档应该包含有关如何为 stomp 设置连接器的信息。以最简单的形式,启用连接器看起来像:

<transportConnectors>
   <transportConnector name="stomp" uri="stomp://localhost:61613"/>
</transportConnectors>
Run Code Online (Sandbox Code Playgroud)

一旦在代理端启用,您就可以使用任何支持 stomp 的 python 库。然后,您可以在 python 端使用 Stomp 并在 java 端使用 JMS 与代理通信并从特定目的地发送/接收。