【问题标题】:JMS message producer and consumer transaction managementJMS 消息生产者和消费者事务管理
【发布时间】:2013-05-30 09:24:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java transactions jms messaging producer-consumer


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我不想实现端到端的事务管理,而是想实现两阶段事务。意味着如果生产者端出现问题,只有消息发送应该回滚,如果消费者端出现问题,只有消费应该回滚,但我想在批处理原子级别上实现这一点
    • 可能还有其他解决方案,但我只会使用 one 批处理消息。它们包含什么,它们的大小是多少?
    猜你喜欢
    • 2019-01-15
    • 2018-02-08
    • 2017-07-13
    • 2012-05-18
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多