我已经在MSMQ中创建了一个事务性que。然后,我成功地向该队列提交了两条消息。第一条消息将在处理器中导致错误,并且MSMQ事务将回滚;因此,该消息将被放回队列中。第二条消息将在处理后成功,并且将提交MSMQ事务。
注意:我还没有将第一个消息移动到另一个/有毒队列的代码,这意味着它将不断被提取以进行处理,理论上消息2永远不会有机会被处理。
问题:如果我有一个监听器/处理器处理来自事务队列消息,消息2将永远不会被提取。这是意料之中的。
但是,如果我有两个监听器,消息#2确实会被接收;这会让我感到困惑。我认为MSMQ transaction queue只会让消息按照到达的顺序进行处理。
附注:如何确定不能进一步处理消息1并将其移动到另一个队列。MSMQ是否会统计一条消息被处理器接收了多少次?
发布于 2017-11-10 21:11:30
消息在被读取之前一直存在于队列中。当您的第一个侦听器读取有毒消息时,它将被标记为隐藏,直到事务中止,消息再次变为可见。在此期间,第二个监听器看不到有害消息,只能看到第二个消息。
您可以使用许多重试队列来模拟这一过程。在第一次失败时,始终移动到重试队列#1;在失败时,始终移动到重试队列#2;在失败时,始终移动到重试队列#2;在失败时,移动到最终队列进行调查。
“MSMQ会统计处理器接收到消息的次数吗?”-不会。
https://stackoverflow.com/questions/47205656
复制相似问题