我正在使用ActiveMQ for C ++。 在我们计划的设计中,我们将消费消息,将它们传递给某些异步处理,然后才将消息视为已处理。 我们希望并行处理多个消息 - 每个消息将在不同的时间内完成处理 - 并且仅确定那些已完成处理的消息。这样做是为了避免在服务器出现故障时丢失消息,处理崩溃等。
从文档和测试两方面来看,我都知道在CLIENT_ACKNOWLEDGE和SESSION_TRANSACTED两种模式下,都无法确认只有一条消息。 这种情况有最佳做法吗?我是否应该持有“会话池”,每个会话同步处理一条消息然后确认它?
感谢。
答案 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();