2014-01-10 106 views
5

如果有一种开箱即用的方式将消息放入msmq中,并且超时时间已定义。 下到期我指的是以下情形:发送消息到msmq中并显示消息过期超时

  • 消息发送者将消息发送到队列中相当频繁
message 1 published at 1:00 
message 2 published at 1:02 
message 3 published at 1:04 
  • 消息reciever需要从队列中的消息和运行时间费用标准程序

消息1在1:00收到并且由应用逻辑在1:05

  • 处理使其SENCE处理哪些不是旧的特定时间帧消息

我们推荐不超过1分钟的过程消息,以便这个 要求我希望消息2将从队列中消失

问题:

  • 我可以存档,通过一个开箱即用的功能?
  • 如果不是?最佳做法是什么?
  • 是msmq原则上是否正确使用此用例的技术?哪一个可以更好地满足要求?
+0

您正在使用队列的某些特定原因/限制?你有什么其他共享数据的方式? –

+0

使用队列的想法来自于有几个发送者并行发送消息,但消息处理相当顺序 –

回答

5

Message类有一个TimeToBeReceived属性(请参阅MSDN)。我认为它应该符合你的要求。

另外,在我看来,你的系统不能以消耗速度产生消息。 在不了解系统的更多细节的情况下很难说清楚,但可能值得探索并行使用消息的可能性(如果您还没有这样做)。

+0

msdn状态:获取或设置从目标队列接收消息的最大时间量。但我认为消息应该保留在队列中的时间很长 –

+1

实际上,我认为它按照你想要的方式工作:如果消息在队列中“停留”指定的时间量并且没有人“接收”它,它基本上被丢弃。 –

+0

啊...是的!你是对的! –

0

如果你有机会获得这两个生产者/消费者的源代码,你可以共享一个队列,但在内存中,使用LINQ筛选是在预期的时间框架消息并处理它们

0

System.Messaging.Message类有属性为TimeToBeReceived,如果邮件超时,将导致邮件被忽略(或发送到错误的邮件队列)。

唯一的问题是您必须确保客户端的时间与服务器端的时间同步。

+0

只是毛罗给小贴了! –