ActiveMQ:一次执行一条消息

时间:2013-06-04 07:35:56

标签: activemq activemq-cpp

我正在使用ActiveMQ for C ++。 在我们计划的设计中,我们将消费消息,将它们传递给某些异步处理,然后才将消息视为已处理。 我们希望并行处理多个消息 - 每个消息将在不同的时间内完成处理 - 并且仅确定那些已完成处理的消息。这样做是为了避免在服务器出现故障时丢失消息,处理崩溃等。

从文档和测试两方面来看,我都知道在CLIENT_ACKNOWLEDGE和SESSION_TRANSACTED两种模式下,都无法确认只有一条消息。 这种情况有最佳做法吗?我是否应该持有“会话池”,每个会话同步处理一条消息然后确认它?

感谢。

2 个答案:

答案 0 :(得分:0)

虽然我从未真正在C ++中为ActiveMQ实现并发使用者,但这通常是你在Java中处理这种情况的方式。

使用会话和消息侦听器创建许多不同的线程,每个线程读取队列的消息,执行处理然后提交事务(如果不想要事务,则为acks)。

答案 1 :(得分:0)

创建会话时,您可以使用cms :: Session确认模式INDIVIDUAL_ACKNOWLEDGE,它允许您确认单个消息。 cms :: Message对象有一个确认方法,可用于确认每条消息。

cms::Session* session = connection.createSession(cms::Session::INDIVIDUAL_ACKNOWLEDGE);

要回复消息:

cms::Message* message = consumer.receive();
message->acknowledge();