0

我正在为 C++ 使用 ActiveMQ。在我们计划的设计中,我们将使用消息,将它们传递给一些异步处理,然后才将消息视为已处理。我们希望并行处理多个消息——每个消息将在不同的时间完成处理——并且只确认那些完成处理的消息。这是为了避免在服务器宕机、进程崩溃等情况下丢失消息。

从文档和测试中,我了解到在 CLIENT_ACKNOWLEDGE 和 SESSION_TRANSACTED 模式下,没有办法只确认一条消息。这种情况有最佳实践吗?我应该持有一个“会话池”,每个会话一次同步处理一条消息然后确认它吗?

谢谢。

4

2 回答 2

0

尽管我从未真正在 C++ 中为 ActiveMQ 实现并发使用者,但这是您通常在 Java 中处理此类情况的方式。

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

于 2013-06-04T12:20:10.540 回答
0

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

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

要确认消息:

cms::Message* message = consumer.receive();
message->acknowledge();
于 2013-06-04T13:50:36.843 回答