2012-09-02 54 views
6

我是C++的新手,但在Java EE方面有很多经验。C++和JMS - 如何连接这两个?

我需要编写一个非常异步的小应用程序。它从HTTP接收数据并将其存储在Queue(它需要有保证的交付和非常高的吞吐量),像ActiveMQ或OpenMQ,可能通过JMS。

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

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

有人可以用C++的经验,请介绍一些基础知识对我说:

  1. JMS是C++的担保交付队列的唯一选择?你是否建议使用ActiveMQ或其他的东西,因为消费者会使用C++。

  2. 是否需要在C++中创建某种类型的多线程守护进程来侦听Queue消息,或者是ActiveMQ的C +消费者实现的线程创建(消息消耗)部分?

有关如何实施上述场景的任何其他建议将非常感激。

编辑:我宁愿消息代理和客户端在C++。 ActiveMQ是一款Java产品,并不是我们真正需要的。

+0

看看[ZeroMQ](http://www.zeromq.org/)。这可能是你正在寻找的东西。 – Codo

+0

对于像我这样的新手来说,ZeroMQ看起来非常低级。我正在寻找一些已经具有更高层次可靠消息队列抽象的库。 – bozo

+0

专有软件是一个选项吗?看看IBM WebSphere MQ,它提供了大量的客户端库... –

回答

18

1 - JMS - Java消息服务 - 仅仅是Java和Java的API参考。除了AMQP之外,没有适用于C++的消息传递标准(对我来说,这并不是真正的跨实现,而是应该尽可能好)。对于C++,您必须依赖每个消息代理实现的特定供应商库。

建议实现的:

  • ActiveMQ的 - 它有一个很好的C++ API(称为CMS),这是JMS蓝本,并命名为 - 所以你会觉得熟悉的API。主要的代理可以运行在Java上 - 可能是最简单的选择。

  • IBM WebSphere MQ - 非开放源代码,运行本机(用C语言编写)并具有C++库的企业级代理。当你了解学习曲线并且价格无关紧要时,你会感觉很好。

  • RabbitMQ - 非常流行的可靠消息传递,具有高性能和开放源代码。具有C++客户端库,但是用Erlang编写并在erlang/otp运行时内运行。

  • Apache QPID - 不太知名的AMQP/JMS代理。有两种风格的服务器端,Java和C++,其中C++代理具有更好的性能。来自C++客户端库。

2 - 对于多线程,JMS规范并没有真正的解决方案。它更像是Java EE容器(或者Spring Framework),它简单地包装了线程的管理并将开发人员从中解脱出来。在这种情况下,ActiveMQ的支持类别并不多,就我所知,其他供应商的库都没有。所以,找一些包装线程的库(我没有线索)或者自己处理消费者线程。它不应该所有这些混乱,做对。

+1

惊讶地看到这个答案只有5票。它很棒。可悲的是我只能给一个。 – Mats