title: Java/Python communication via message broker
body: <p>What is a good solution for communication via message broker that supports both (C)Python and Java/JMS applications?  My particular requirements are:</p>
  
  <ul>
  <li>open source solution</li>
  <li>Available on Linux-based systems</li>
  <li>No rendezvous between sender and receiver required (i.e. uses a message broker)</li>
  <li>Multiple producers and consumers supported for a single event queue (only one consumer receives each message)</li>
  <li>Unit of work support with two-phase commit (XA support nice to have)</li>
  <li>Support for persistent messages (i.e. that survive a restart of the broker)</li>
  <li>Supports JMS for Java clients</li>
  <li>No component is "fringe", meaning at risk of falling out of maintenance due to lack of community support/interest</li>
  <li>If there is a Python client that manages to "speak JMS" that would be awesome, but an answer including a task to write my own Python JMS layer is acceptable</li>
  </ul>
  
  <p>I have had a surprisingly hard time finding a solution for this.  Apache's ActiveMQ has no Python support out of the box.  ZeroMQ requires a rendezvous.  RabbitMQ does not appear to support JMS.  The best candidate I have found is a combination of ActiveMQ and the pyactivemq library.  But the first and last release of pyactivemq was in 2008, so it would appear that that fails my "no fringe" requirement.</p>
  
  <p>The ideal answer will be the names of one or more well-supported and well-documented open source packages, that you have personally used to communicate between a Java/JMS and Python application, and that do not require a lot of integration work to get started.  An answer that includes an "easy" (up to a few days of work) implementation of additional glue code to meet all the requirements above, would be acceptable.  A commercial solution, in the absence of a good open source candidate, would be acceptable also.</p>
  
  <p>Also, Jython is out.  (If only I could...)  The same Python applications will need to use modules only available in CPython.</p>