Java / Python связь через брокер сообщений - PullRequest
13 голосов
/ 01 июля 2011

Что такое хорошее решение для связи через брокер сообщений, который поддерживает приложения (C) Python и Java / JMS? Мои конкретные требования:

  • решение с открытым исходным кодом
  • Доступно в системах на базе Linux
  • Рандеву между отправителем и получателем не требуется (т. Е. Используется брокер сообщений)
  • Поддерживается несколько производителей и потребителей для одной очереди событий (каждое сообщение получает только один потребитель)
  • Единица поддержки работы с двухфазной фиксацией (поддержка XA приятно иметь)
  • Поддержка постоянных сообщений (т. Е. После перезапуска посредника)
  • Поддерживает JMS для клиентов Java
  • Ни один из компонентов не является "незначительным", что означает риск выпадения обслуживания из-за отсутствия поддержки / интереса сообщества
  • Если есть клиент Python, которому удается «говорить на JMS», это было бы здорово, но ответ, включающий задачу по написанию моего собственного слоя Python JMS, является приемлемым

Мне было удивительно трудно найти решение для этого. Apache ActiveMQ не имеет поддержки Python из коробки. ZeroMQ требует встречи. RabbitMQ не поддерживает JMS. Лучший кандидат, который я нашел, - это комбинация ActiveMQ и библиотеки pyactivemq. Но первый и последний выпуск pyactivemq был в 2008 году, так что может показаться, что он не соответствует моему требованию "без каких-либо ограничений".

Идеальным ответом будут имена одного или нескольких хорошо поддерживаемых и хорошо документированных пакетов с открытым исходным кодом, которые вы лично использовали для связи между приложениями Java / JMS и Python и которые не требуют большой интеграции работать, чтобы начать. Ответ, который включает в себя «простую» (до нескольких дней работы) реализацию дополнительного связующего кода, отвечающего всем вышеуказанным требованиям, будет приемлемым. Коммерческое решение, при отсутствии хорошего кандидата с открытым исходным кодом, также будет приемлемым.

Также вышел Jython. (Если бы я только мог ...) Одни и те же приложения Python должны будут использовать модули, доступные только в CPython.

Ответы [ 4 ]

5 голосов
/ 14 июля 2011

JMS - это спецификация, а не реализация.RabbitMQ - это действительно вариант.

Я также с радостью использовал HornetQ http://www.jboss.org/hornetq от Jboss, так как с каждой вещью он в большей степени согласуется с каждой вещью Java EE, но RabbitMQ будет особенно предпочтительным, если вы используете Springа также

4 голосов
/ 16 июля 2011

Мне было удивительно трудно найти решение для этого. Apache ActiveMQ не имеет встроенной поддержки Python.

Брокеры ActiveMQ полностью поддерживают использование протокола Stomp из коробки. Stomp - это текстовый протокол для обмена сообщениями, который имеет клиентов для многих платформ и языков.

Документация ActiveMQ должна содержать информацию о том, как настроить соединитель для Stomp. В простейшей форме включение соединителя будет выглядеть примерно так:

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

После включения на стороне брокера вы можете использовать любую библиотеку python, которая поддерживает stomp. Затем вы можете использовать Stomp на стороне Python и JMS на стороне Java для связи с брокером и отправки / получения из определенных мест назначения.

1 голос
/ 11 июля 2011

Мы использовали Очередь сообщений GlassFish (ранее Sun Java MQ) - она ​​унаследована от OpenMQ

Он удовлетворяет большинству ваших требований, если не всем. В Red Hat Linux (RHEL) мы использовали отказоустойчивых брокеров с избыточной кластеризацией - это надежно для интенсивного использования. Хотя некоторые «причуды» скрываются здесь и там.

1 голос
/ 02 июля 2011

Возможно, вы захотите взглянуть на OpenAMQ и еще раз взглянуть на RabbitMQ .

Базовая технология обмена сообщениями, используемая RabbitMQ и OpenAMQ: AMQP .Вы должны быть в состоянии легко найти клиенты Python и Java, которые работают против обоих этих брокеров (и якобы любого другого специфицированного брокера).

Если JMS необходим, возможно, вы сможете найти клиента JMS, реализованного поверх AMQP (OpenAMQ предоставил такого клиента за один раз, но я не уверен в его текущем состоянии),

...