【问题标题】:How does Setsessiontransacted work in JMSTemplate and DefaultMessageListenerContainer with Pub/sub modelSetsessiontransacted 如何在具有 Pub/sub 模型的 JMSTemplate 和 DefaultMessageListenerContainer 中工作
【发布时间】:2017-09-19 16:51:28
【问题描述】:

我正在使用发布者/订阅者模型,其中我使用 JMSTemplate 将消息发布到主题。我正在使用 defaultmessagelistenercontainer 订阅和接收消息。

我知道我可以在两种配置中都将 sessionTransacted 设置为 true。但是如果我把

1) 只有 JMSTemplate setsessionTransacted true?

2) 只有messagelistenercontainer setsessiontransacted true?

3) JMSTemplate 和 messagelistenercontainer setsessiontransacted 都为 true?

我只想知道这三件事在发送到主题的消息和接收消息并使用它执行所需工作方面的区别。我试图理解的核心问题是

涵盖这些内容的会议持续多长时间?

消息被发送到主题和订阅者接收消息并使用它执行所需的工作

【问题讨论】:

    标签: java publish-subscribe spring-jms jmstemplate message-listener


    【解决方案1】:

    交易是分开的。在提交提交之前,消费者不会收到消息。

    如果您在同一线程上消费一条消息并发送另一条消息,并且两者都进行了事务处理,则它们都将在同一个事务处理中运行。

    【讨论】:

    • 所以据我了解 jmsTemplate 和 DMLC 事务是分开的。
    • 所以据我了解,jmsTemplate 和 DMLC 事务是分开的。因此,如果我的 DMLC sessiontransaction 设置为 true,onMessage() 方法中的所有代码都将在事务中完成。如果我的 onMessage() 中有异常会发生什么。消息会重新发送给我的侦听器并再次执行吗?
    • 我使用的是主题而不是队列
    • 主题对比。队列无关紧要。消息被回滚并重新传递。无限期,除非您的经纪人支持死信毒药消息。一些代理提供了重新交付计数标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2015-05-21
    • 2022-01-02
    相关资源
    最近更新 更多