13

什么是通过支持 (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 中可用的模块。

4

4 回答 4

5

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

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

于 2011-07-14T03:38:59.983 回答
4

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

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

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

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

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

于 2011-07-16T17:56:31.337 回答
1

我们一直在使用GlassFish 消息队列(以前称为 Sun Java MQ)——它继承自OpenMQ

它满足您的大部分要求,如果不是全部的话。我们一直在 Red Hat Linux (RHEL) 中使用故障转移集群代理——它对于大量使用是可靠的。虽然有些“怪癖”潜伏在这里和那里。

于 2011-07-11T16:02:50.630 回答
1

您可能想看看OpenAMQ并再看看RabbitMQ

RabbitMQ 和 OpenAMQ 使用的底层消息传递技术是AMQP。您应该能够轻松找到适用于这两个代理(以及表面上任何其他符合规范的代理)的 Python 和 Java 客户端。

如果 JMS 是必须具备的,那么您可能会找到一个在 AMQP 之上实现的 JMS 客户端(OpenAMQ 曾经提供过这样的客户端,但我不确定它的当前状态)。

于 2011-07-01T22:25:39.730 回答