Связь Java/Python с помощью брокера сообщений

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

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

Мы использовали GlassFish Message Queue (ранее Sun Java MQ) - она ​​унаследована от OpenMQ

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