【发布时间】:2014-07-18 19:26:59
【问题描述】:
我对 Msmq 还很陌生,我不了解交易的工作方式。
所以,假设我有一个事务队列,我向它发送了一条消息,但没有指定该方法不会抛出的任何事务,并且消息无处可去。文档说 -
'如果使用此重载将消息发送到事务队列,则消息将发送到死信队列'。
但是我在系统队列中的任何地方都看不到该消息。
这是供参考的代码 -
var path = @".\private$\transactionalQ";
if (MessageQueue.Exists(path))
MessageQueue.Delete(path);
var q = MessageQueue.Create(path, false);
q.Send("non transactional message");
在将事务性消息发送到非事务性队列时,我看到了类似的行为。
如果我做了一些意想不到的事情,我希望方法调用会抛出。我错过了什么吗?
【问题讨论】:
-
MSMQ 旨在在目的地暂时无法到达时工作。在 MSMQ 放弃并将其移动到死信队列之前,该消息会在传出队列中停留一段时间。我忘记了默认超时时间,但它是几小时,而不是几秒。
-
谢谢,这很有道理,我在哪里可以看到这个传出队列,我在 compmgmt 管理单元中看不到它。
-
本地发送时没有外发队列。
-
谢谢。越来越好奇......所以如果我向本地队列发送消息,并且发送和队列之间的事务模式不兼容,那么消息是否会丢失?
-
要让消息最终进入死信队列,您需要启用负源日志。如果您不想保留消息,MSMQ 会丢弃错误消息。