Здесь есть пара моментов, которые не имеют смысла для меня, 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:
Учитывая уточнение, я уточню свой ответ:
- Вам нужен общий брокер сообщений, доступный для C ++ и Java, такой как ActiveMQ.
- Вам нужен небольшой / легкий слой интеграции, такой как некоторые из перечисленных выше, чтобы принимать из 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 (хитрый тип пантомимы по этой ссылке)