【问题标题】:MSMQ TransactionsMSMQ 事务
【发布时间】:2018-04-22 16:07:33
【问题描述】:

我在 MSMQ 中创建了一个事务队列。然后我成功地将两条消息提交到该队列。第一条消息将导致处理器出错,MSMQ 事务将回滚;因此消息将被放回队列中。第二条消息在处理后会成功,MSMQ 事务将提交。

注意:我还没有将第一条消息移动到另一个/毒物队列的代码,这意味着它将继续被拾取进行处理,理论上消息 2 永远不会有机会被处理。

问题:如果我有 1 个侦听器/处理器处理来自该事务队列的消息,则消息 2 将永远不会被拾取。这是意料之中的。

但是,如果我有两个侦听器,则消息 #2 会被接收;这让我很困惑。我以为 MSMQ 事务队列只会让消息按到达的顺序处理。

附注:我如何确定无法进一步处理消息 1 并将其移动到另一个队列。 MSMQ 是否记录处理器接收消息的次数?

【问题讨论】:

    标签: msmq queuing


    【解决方案1】:

    消息在被读取之前一直存在于队列中。 当您的第一个侦听器读取有害消息时,它将被标记为隐藏,直到事务中止并且消息再次可见。 在此期间,第二个侦听器看不到毒消息,只会看到第二个消息。

    “我如何确定无法进一步处理消息 1 并将其移动到另一个队列。” - WCF/MSMQ 内置了有害消息处理。您可以自己模拟一些重试队列。在第一次失败时,总是移动到重试队列#1;再次尝试消息,如果失败,总是移动到重试队列#2;再次尝试该消息,如果失败,则移至最终队列进行调查。

    “MSMQ 是否记录处理器接收消息的次数?” - 没有。

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2014-06-18
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多