2

我正在尝试为我目前的项目实施 JMS。

我将消息生产者和消息消费者创建为两个独立的应用程序,并希望将生产和消费作为两个独立的进程(客户端)。但我的要求是在生产者和消费者之间进行事务管理。假设生产者正在发送 100 条消息的批次,并且如果任何一条消息传递失败,则整个 100 条消息批次应该失败。

我想我可以做到这一点,因为我发送的每批消息都在单独的会话中,所以我可以提交或回滚会话。但是我的消费者是异步的并且在单个会话上运行。

如何在消费者中实现事务管理?如果该批处理中的任何单个消息处理(消费)失败,我希望消费者也应该回滚上述 100 条消息批处理。

4

1 回答 1

4

您喜欢实现端到端确认之类的东西,但这在某种程度上与本质上异步的消息队列的想法相冲突。如果您的消费者很忙,则交易可能会跨越更长的时间。

为简化起见,我不会发送 100 条消息,而是只发送一条消息,因为实际上您只有一条逻辑消息。

为了实现确认/重试,消费者可以在不同的队列上发回另一条消息。生产者可以重试,接收者必须丢弃重复项等。

我宁愿分担职责:生产者的职责是将消息传递到您的消息服务器。检查队列是否已满是数据中心的职责。它是客户端的责任,只有完全处理的消息才会从队列中删除(查找 JMS 会话 CLIENT_ACKNOWLEDGE)。

于 2013-05-30T10:17:29.113 回答