C ++ JMS-клиент или C ++ / C SOAP-клиент - PullRequest
3 голосов
/ 27 сентября 2010

У меня есть приложение на C ++, но оно должно будет «общаться» с Java-сервисом сообщений. В прошлом мы использовали WebSphere MQ и использовали их библиотеки C ++ для «разговора».

Так что я нахожусь в поиске (в идеале) бесплатного решения C ++ to Java, которое не содержит всю JVM в памяти.

Другой вариант, который я рассмотрел, - SOAP. Я посмотрел на Axis2-C, но он дает мне полную реализацию сервера, которая мне не нужна. Я видел разговоры о gSOAP, но видел смешанные комментарии здесь. И снова, похоже, он предоставляет мне целый сервер.

Я мог бы написать код сам, но это противоречит моему убеждению (на основе Java), что существует отличный бесплатный код.

Спасибо! A'z

Ответы [ 3 ]

5 голосов
/ 27 сентября 2010

Здесь есть пара моментов, которые не имеют смысла для меня, JMS - это абстракция, специфичная для java, над универсальным API обмена сообщениями, во многом так же, как JDBC - абстракция, специфичная для java, над универсальным API базы данных.
Я не могу представить, чтобы кто-то хотел использовать драйвер JDBC для приложения C ++, он предпочел бы использовать драйвер ODBC.

Итак, если я предполагаю, что ваша цель - отправлять сообщения без использования Websphere MQ из приложения C ++, тогда я могу порекомендовать вам рассмотреть следующее:

  • Вам нужен асинхронный обмен сообщениями? то есть хранить сообщение в очереди до тех пор, пока оно не будет использовано?
  • Если да, то веб-службы не будут работать для вашего приложения, если вы не готовы разместить веб-сервер для получения ответов и перезвонить своему приложению.

Вы не упомянули, будет ли базовая служба сообщений на основе Java JMS или WebServices.
Можно рассмотреть возможность использования ActiveMQ в качестве поставщика сообщений, он обеспечивает реализацию JMS API, а также реализует протокол STOMP, который имеет клиентские библиотеки для ряда языков, включая C ++.

Вы можете оставить решение открытым для протоколов конечных точек, пока опробуете различные варианты, внедрив уровень интеграции, используя что-то вроде Mule .
Вы можете быстро разработать небольшие интеграции на Mule, например принять сообщение в ActiveMQ, отправить его в WebService и поместить ответ WebService в другую очередь ответов ActiveMQ. Или наоборот, примите вызов веб-службы и отправьте SOAP в очередь JMS, дождитесь ответа JMS и создайте ответ SOAP.

Есть много ESB-подобных структур, которые могут облегчать такого рода интеграции в различной степени:

EDIT: Учитывая уточнение, я уточню свой ответ:

  1. Вам нужен общий брокер сообщений, доступный для C ++ и Java, такой как ActiveMQ.
  2. Вам нужен небольшой / легкий слой интеграции, такой как некоторые из перечисленных выше, чтобы принимать из ActiveMQ и пересылать в SonicMQ, и наоборот.

2.1 Из того, что я знаю о Sonic, у них есть стек ESB, который должен иметь возможность делать это вместо использования одного из контейнеров / каркасов, упомянутых выше, но это откроет вопросы принадлежности интеграции между вами и клиентом.

Я нашел 3 ссылки, показывающие поддержку Sonic для C и C ++:
- http://www.sonicsoftware.com/products/docs/sonicmq_app_server_ds.pdf
- http://www.sonicsoftware.com/developer/documentation/docs/sonicmq_c_v60.pdf
- http://communities.progress.com/pcom/servlet/JiveServlet/download/10809-3-10161/cclients_readme_76.htm (хитрый тип пантомимы по этой ссылке)

0 голосов
/ 07 июня 2011

Есть библиотеки C ++ для SonicMQ.Основное ограничение заключается в том, что вы должны использовать ту же сборку (то есть библиотеки STL и т. Д.), Которую Sonic использовал для компиляции библиотек.

http://web.progress.com/en/sonic/sonicmq-clients.html

Конечно, вы задали этот вопросболее полугода назад, поэтому эта информация, вероятно, немного запоздала.: -)

0 голосов
/ 27 сентября 2010

Сайт SonicMQ, похоже, указывает , что они поддерживают C ++.

Может показаться, что это подходит.

...