[英]MSMQ Poison message and TimeToReachQueue
我尝试以以下方式创建有毒消息场景。
1-在服务器上创建了一个消息队列(事务队列)。 2-创建了一个接收器应用程序,用于处理该服务器上的传入消息。 3-在客户端计算机上创建了一个客户端应用程序,该客户端应用程序使用队列的特定名称将消息发送到该服务器。
4-我使用带有以下代码(C#4.0框架)的发送方客户端应用程序:
System.Messaging.Message mm = new System.Messaging.Message("Some msg");
mm.TimeToBeReceived = new TimeSpan(0, 0, 50);
mm.TimeToReachQueue = new TimeSpan(0, 0, 30);
mm.UseDeadLetterQueue = true;
mq.Send(mm);
因此,这将超时时间设置为30秒。
我可以在客户端计算机的消息队列中看到消息正在等待发送(“等待连接”)。 我的问题是,当它超过30秒(或50秒)时,该消息也永远不会进入客户端计算机上的“死信”队列。
为什么会这样呢? ...我原以为它会在那里超时。
在Windows 7(客户端)/ Windows Server 2008 R2(服务器)上测试
您的问题已经有几天了。 你有发现什么吗
我对您的情况的解释是, 拔下电缆是关键。
在John描述的情况下,存在一个现有连接 ,并且接收方无法在设置的时间限制内正确处理该消息。
但是,在您的情况下,接收端点永远不会获得处理消息的机会 ,因此永远不会发生超时。 如您所说,消息的状态为Waiting for connection
。 从逻辑上讲, 从未发送过的消息无法超时到达其目的地 。
只是问问自己,如果队列本质上是不活动的 ,Windows / MSMQ会不必要地牺牲多少资源,以及多久检查一次MessageQueues的条件? 系统上可能有很多带有很多消息的队列。
我期望的行为是,如果重新插入网络电缆并重新建立连接,那么只有在需要时,才会检查您的毒药消息是否超时,并最终移至DeadLetter队列。
您可能想签出此方案-还是同时已经签出了该方案?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.