>开源解决方案
>在基于Linux的系统上可用
>发送者和接收者之间不需要会合(即使用消息代理)
>支持单个事件队列的多个生产者和消费者(只有一个消费者接收每个消息)
>具有两阶段提交的工作支持单位(XA支持很好)
>支持持久性消息(即在经纪人重新启动后能够幸存)
>支持Java客户端的JMS
>没有组件是“边缘”,意味着由于缺乏社区支持/兴趣而退出维护的风险
>如果有一个Python客户端设法“说出JMS”,这将是令人敬畏的,但包括编写我自己的Python JMS层的任务的答案是可以接受的
我有一个惊奇的时间找到一个解决方案. Apache的ActiveMQ没有开箱即用的Python支持. ZeroMQ需要一个会合. RabbitMQ似乎不支持JMS.我找到的最好的候选人是ActiveMQ和pyactivemq库的组合.但是,pyactivemq的第一个和最后一个版本是在2008年,所以似乎这不符合我的“无边缘”要求.
理想的答案将是一个或多个得到良好支持且文档完整的开源包的名称,您已经亲自用于在Java / JMS和Python应用程序之间进行通信,并且不需要大量的集成工作来获取开始.包括“容易”(最多几天的工作)的答案将实现额外的胶水代码以满足上述所有要求,将是可以接受的.没有一个好的开源候选人的商业解决方案也是可以接受的.
此外,Jython已经出来了. (如果只有我可以…)同样的Python应用程序将需要使用仅在CPython中可用的模块.
解决方法
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的文档应包含有关如何设置连接器的信息.在其最简单的形式中,启用连接器将类似于:
<transportConnectors> <transportConnector name="stomp" uri="stomp://localhost:61613"/> </transportConnectors>
一旦在代理端启用,您可以使用任何支持踩踏的python库.然后,您可以在python侧使用Stomp,在Java端使用JMS与代理进行通信,并从特定目的地发送/接收.