JMS消息生成器和消费者事务管理

时间:2013-05-30 09:24:36

标签: java transactions jms messaging producer-consumer

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

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

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

如何在消费者中实现交易管理?如果该批次中的任何单个消息处理(消耗)失败,我希望消费者还应该回滚上面提到的100个消息批处理。

1 个答案:

答案 0 :(得分:3)

您希望实现类似端到端确认之类的内容,但这会以某种方式与消息队列的概念发生冲突,这些消息队列本质上是异步的。如果您的消费者很忙,交易可能会延长一段时间。

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

要实现确认/重试,消费者可以在另一个队列上发回另一条消息。制作人可以重试,接收者必须丢弃重复等。

我宁愿分担责任:制作人的责任是将消息传递给您的消息服务器。这是数据中心检查队列填充的可靠性。这是客户的责任,只有完全处理的消息才会从队列中删除(查找JMS会话CLIENT_ACKNOWLEDGE)。