Использование Apache ActiveMQ с C / C ++ - PullRequest
4 голосов
/ 08 февраля 2011

Мы пишем новый код на C / C ++, который требует интеграции в шину сообщений ActiveMQ.Для этого есть много вариантов:

  • CMS - это простой в использовании JMS-подобный API для C ++.
  • OpenWire C Client (доступно тольков ActiveMQ 4.x или более поздней версии).
  • Клиент OpenWire C ++
  • Клиент Stomp C (libstomp)

Тогда есть «более дикие» опции, такие как REST API,соединение с клиентом ActiveMQ Java с использованием JNI, SOAP, XMPP ... Итак, что я должен использовать для интеграции моего приложения C / C ++ с ActiveMQ и почему?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Из четырех клиентов, которые вы перечисляете, только ActiveMQ-CPP ( CMS ) активно поддерживается; остальные не были активными в течение длительного времени. При этом вы должны использовать вариант, который наилучшим образом соответствует потребностям вашего проекта. ActiveMQ-CPP позволит вам использовать все те же функции, что и JMS-клиент, поддерживает аварийное переключение брокера, а также даст вам доступ к некоторым специфическим функциям ActiveMQ, таким как удаление адресатов, сжатие сообщений и т. Д.

Требования вашего проекта должны диктовать выбор в конце.

0 голосов
/ 25 марта 2016

Да, ActiveMQ-CPP CMS - хороший вариант для интеграции нашего унаследованного кода C. но я также сделал интеграцию кода c с java (JMS) как listener(Replier), используя JNI и вызванную функцию c из слушателя java. В нашем случае у нас есть слушатель java, который активно прослушивает сообщение от брокера activemq, затем передает это сообщение собственной функции c, используя JNI, и ответное сообщение от функции c снова отправляется обратно брокеру activemq, используя getJMSReplyTo и getJMSCorrelationID.

мы выполнили оба подхода: он прослушивает сообщение от брокера AMQ, передает сообщение функции c и отправляет обратно обработанное / обработанное сообщение брокеру AMQ.

однако мне интересно знать о нижеследующих пунктах

  1. какой вариант будет лучшим и почему?
  2. если мы перейдем на Java & C с использованием JNI, возникнут ли какие-либо проблемы с производительностью или параллелизмом для вызова разделяемой библиотеки c (библиотеки .so) из Java?
...