C++ JMS客户端或C++/C SOAP客户端

3
我有一款C++应用程序,但它需要与基于Java的消息服务进行“通信”。过去我们使用WebSphere MQ并使用他们的C++库来进行“通信”。
因此,我正在寻找(理想情况下)免费的C++到Java解决方案,它不会在内存中保留整个JVM。
我已经研究了SOAP的另一个选择。我已经研究了Axis2-C,但它给我整个服务器实现,而我不需要。我听说过gSOAP,但这里的评论褒贬不一。而且它似乎也为我提供了整个服务器。
我可以自己编写代码,但这违背了我的(基于Java的)信念,即优秀的免费代码存在于外部。
谢谢! A'z

好的,让我澄清一下(对于我的表述不够清晰,我表示歉意)。目前的IBM MQ正在更改为一个新的消息层 - SonicMQ(这是客户的更改)。据我们所知,没有C++库可以与SonicMQ“交流”,就像IBM MQ一样。因此,我有JMS和WebServices(SOAP)作为可能的传输层。我的C++应用程序无法更改,因为它并不小。 - aabramovich
啊,这样就清楚了。我已经撤回了我的回答,因为它只适用于WMQ。 - T.Rob
3个回答

5
这里有几个点让我感到困惑,JMS是一个Java特定的抽象层,用于通用消息API,就像JDBC是一个Java特定的抽象层,用于通用数据库API。我无法想象任何人想要为C++应用程序使用JDBC驱动程序,他们宁愿使用ODBC驱动程序。
因此,如果我假设您的目标是从C++应用程序发送消息而不使用Websphere MQ,则建议您考虑以下内容:
  • 您是否需要异步消息传递?即将消息存储在队列中,直到消息被消费?
  • 如果是,则Web服务将无法满足您的应用程序需求,除非您准备托管Web服务器以接收响应并回调到您的应用程序。
您没有提及底层基于Java的消息服务是否将是JMS或WebServices。您可以考虑使用ActiveMQ作为消息提供程序,它提供了JMS API的实现,并实现了STOMP协议,该协议具有包括C++在内的多种语言的客户端库。
你可以使用类似Mule的集成层来实现端点协议的决策,并尝试各种选项。通过Mule,你可以快速开发小型集成,例如接受ActiveMQ上的消息,并将其发布到Web服务,然后将Web服务响应放置在不同的ActiveMQ响应队列中。或者反过来,接受Web服务调用并将SOAP发布到JMS队列,等待JMS响应并构建SOAP响应。
有许多类似ESB的框架可以在各种程度上促进这些类型的集成:

编辑: 根据澄清,我将完善我的答案:

  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(此链接的mime类型有问题)

好的,让我澄清一下(对于我的表述不够清晰,我表示歉意)。目前的 MQ 正在被更改为一个新的消息层 - SonicMQ(这是客户的更改)。据我们所知,没有 C++ 库可以像 IBM MQ 一样“与”SonicMQ通信。因此,我有 JMS 和 WebServices(SOAP)作为可能的传输层。我的 C++ 应用程序无法更改,因为它并不小... - aabramovich
是的,谢谢您提供这些信息!不知何故,我们这里有几个人一直没有找到它们。无论如何... 我仍然想知道如何获得一个“现成”的SOAP客户端(尽可能轻量级)。 - aabramovich
从C++中,您可以查看QT soap组件。http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtsoap/链接包括如何使用SOAP进行谷歌搜索的示例。 - crowne

0

0

SonicMQ网站似乎表明他们支持C ++。

看起来这是合适的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接