通过消息b进行Java/Python通信

2024-05-14 09:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我很难找到解决这个问题的办法。Apache的ActiveMQ没有现成的Python支持。ZeroMQ需要集合。RabbitMQ似乎不支持JMS。我找到的最好的候选者是ActiveMQ和pyactivemq库的组合。但是pyactivemq的第一次也是最后一次发布是在2008年,所以这似乎不符合我的“无边缘”要求。

理想的答案是一个或多个受良好支持且有良好文档记录的开源包的名称,这些包是您个人用来在Java/JMS和Python应用程序之间进行通信的,并且不需要大量的集成工作就可以开始。一个包含“简单”(最多几天的工作)的附加粘合代码实现以满足上述所有要求的答案是可以接受的。如果没有一个好的开源候选人,商业解决方案也是可以接受的。

而且,Jython不在。(如果我能…)同样的Python应用程序将需要使用CPython中的模块。


Tags: 答案应用程序消息代理客户机组件消费者开源
3条回答

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

我也很高兴地使用了Jboss中的HornetQhttp://www.jboss.org/hornetq,因为它更符合Java EE中的每一个事物,但是RabbitMQ将是一个特别的选择,如果您也使用Spring的话

你可能想看看OpenAMQ,再看看RabbitMQ

RabbitMQ和OpenAMQ使用的底层消息传递技术是AMQP。您应该能够很容易地找到针对这两个代理(以及表面上符合规范的任何其他代理)工作的Python和Java客户机。

如果JMS是必需的,那么您可能可以找到在AMQP之上实现的JMS客户机(OpenAMQ一次提供了这样一个客户机,但我不确定它的当前状态)。

I have had a surprisingly hard time finding a solution for this. Apache's ActiveMQ has no Python support out of the box.

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

ActiveMQ的文档应该包含关于如何为stomp设置连接器的信息。在其最简单的形式中,启用连接器类似于:

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

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

相关问题 更多 >

    热门问题