我是C++的新手,但是在Java EE方面有很多经验。

我需要编写一个高度异步的小型应用程序。它从HTTP接收数据并将其存储在一个队列中(它需要保证传递和非常高的吞吐量),例如ActiveMQ或OpenMQ,也许可以通过JMS。

然后,另一个C++应用程序/监听器(通过一些直接由Queue而不是由我的池激活的Listener)从Queue中取出数据,连接到MySQL数据库并进行一些业务逻辑计算,并将消息发送到另一个Queue。

在Java EE中,这将是一个Web应用程序,它将消息发送到JMS队列。消息驱动Bean将成为EJB模块中这些消息的使用者,而 session EJB会将消息发送到传出JMS队列。

有C++经验的人可以向我解释一些基本知识:

  • JMS是C++保证交付队列唯一的选择吗?考虑到消息Consumer将使用C++,您是否建议使用ActiveMQ或其他方式。
  • 是否需要在C++中创建某种多线程守护进程来监听Queue消息,或者此线程创建(消息消耗)是ActiveMQ C +使用者实现的一部分吗?

  • 我们将非常感谢您提出有关如何实现上述方案的其他建议。

    编辑:我希望消息代理和客户端使用C++。 ActiveMQ是Java产品,并不是我们真正需要的产品。

    最佳答案

    1-JMS-Java消息服务-仅是Java和Java的API引用。除AMQP之外,没有适用于C++的消息传递标准(在我看来,这并不是真正应有的跨实现工作)。对于C++,每种消息代理实现都必须依赖于特定的供应商库。

    实现建议:

  • ActiveMQ-它有一个不错的C++ API(称为CMS),以JMS建模和命名-因此您会熟悉该API。主代理将至少在Java上运行-可能是最简单的选择。
  • IBM WebSphere MQ-不是开源的,运行 native (用C编写)并具有C++库的企业级代理。当您克服学习曲线并且价格无关紧要时,它还是不错的。
  • RabbitMQ-非常流行的可靠消息传递,具有高性能和开放源代码。具有C++客户端库,但使用Erlang编写,并在erlang/otp运行时中运行。
  • Apache QPID-鲜为人知的AMQP/JMS代理。有两种口味的服务器端:Java和C++,其中C++代理具有更好的性能。带有C++客户端库。

  • 2-对于多线程,JMS规范也没有真正提供解决方案。它更像Java EE容器(或Spring框架),它简单地包装了线程的管理并减轻了开发人员的负担。在这种情况下,ActiveMQ附带的支持类不超过几个,据我所知,其他任何供应商库都没有。因此,寻找一些包装线程的库(我不知道)或自己处理使用者线程。它不应该那么杂乱无章,做对了。

    关于c++ - C++和JMS-如何连接两者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12234318/

    10-12 22:33