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

通过消息代理进行通信,同时支持(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中可用的模块。


答案 1

JMS 是一个规范而不是实现。RabbitMQ是一个真正的选择。

我也很高兴使用Jboss的HornetQ http://www.jboss.org/hornetq,因为它与Java EE的所有内容更加一致,但是如果您也使用Spring,则RabbitMQ将是首选。


答案 2

我很难找到解决这个问题的方法。Apache的ActiveMQ没有开箱即用的Python支持。

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

ActiveMQ 的文档应包含有关如何设置用于踩踏的连接器的信息。在最简单的形式中,启用连接器将如下所示:

<transportConnectors>
   <transportConnector name="stomp" uri="stomp://localhost:61613"/>
</transportConnectors>

在代理端启用后,您可以使用任何支持踩踏的python库。然后,您可以在python端使用Stomp,在Java端使用JMS与代理进行通信并从特定目标发送/接收。