繁体   English   中英

MSMQ Poison消息和TimeToReachQueue

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM