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

时间:2010-09-27 09:37:26

标签: java c++ soap jms

我有一个C ++应用程序,但它需要与基于Java的消息服务“交谈”。在过去,我们使用WebSphere MQ并使用他们的C ++库来进行“交谈”。

所以我正在寻找(理想情况下)免费的C ++到Java解决方案,它不会将整个JVM保存在内存中。

我研究过的另一个选择是SOAP。 我已经研究过Axis2-C但它给了我整个服务器实现,我不需要它。 我见过关于gSOAP的讨论,但在这里看到了混合评论。它似乎又为我提供了一整套服务器。

我可以自己编写代码 - 但这违反了我(基于Java)的信念,即存在优秀的免费代码。

谢谢! A'z

3 个答案:

答案 0 :(得分: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上的消息,并将其发布到WebService并将WebService响应放在不同的ActiveMQ响应队列上。反之亦然,接受Web服务调用并将SOAP发布到JMS队列,等待JMS响应并构建SOAP响应。

有许多类似ESB的框架可以在不同程度上促进这些集成:

编辑: 鉴于澄清,我将改进我的答案:

  1. 您需要一个可供C ++和Java访问的公共消息代理,例如ActiveMQ。
  2. 你需要一个小/轻量级的集成层,比如上面的一些,从ActiveMQ接收并转发到SonicMQ,反之亦然。
  3. 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类型)

答案 1 :(得分:0)

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

看来这是合适的。

答案 2 :(得分:0)

SonicMQ有C ++库。主要的限制是你必须使用Sonic用来编译库的相同构建(即STL库等)。

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

当然半年前你问过这个问题,所以这些信息可能有点迟了。 : - )