我们有一个基于Case语句处理各种电子邮件和方法的MSMQ。如果收到的消息与其中一个案例不匹配,则会发出错误电子邮件,这是正确的。问题是邮件保留在队列中,直到它正常工作,但由于它永远不会匹配,它会反复发送电子邮件,如果我们不立即抓住它,可能会发送数千次。
我发现如果事件找到了Case,则事务是已提交,但是对于此错误,它是否应该是Committed,还是应该被Aborted或Disposed呢?
答案 0 :(得分:1)
它应该是Committed,因为你已收到并处理了该消息,并且仅仅因为消息不符合这些情况,它仍然执行了一个动作并被处理,这意味着它应该通过一个从队列中删除事务。
答案 1 :(得分:0)
如果我理解正确,我会更新您的代码以捕获未处理的格式(是默认情况)并只提交消息,因为实际上它已被处理。在其他系统中,您将邮件移动到死信队列而不是电子邮件/以及。如果/当您解决导致问题的问题时,这允许您将其移回队列中进行处理。但在那种情况下,你也想提交信息。
您不想使用中止,因为这会将其重新置于队列中。