如果消息在队列中等待的时间超过一段时间(比如说 30 分钟),我该如何让 MSMQ 自动使消息过期?
我们无法控制创建这些消息的系统来设置MaxTimeToReceive
消息的属性。
答案1
你不能。
超时总是在应用程序创建消息时设置的。该值要么由代码提供,要么从发送者的队列管理器的默认值中获取。一旦设置并发送,就完成了。
如果您无法控制发送消息的系统,那么您就倒霉了,必须提供手动方法来清理旧消息。
欢呼
John Breakwell
答案2
对于 Nishkar 的问题来说这可能已经太晚了,但对其他人来说可能会有用。
正如约翰所说,一旦发送消息,您就无法更改消息属性。因此,如果您需要类似的东西,唯一的解决方案是使用另一个中间队列,您可以在其中读取消息,修改任何您想要的内容并将它们发送到原始目标队列。由于这是一个简单的处理,它应该可以快速完成,并且不会影响您 30 分钟的接收时间。需要注意的一点是,最终消息不会与原始消息相同。除了您更改的这些属性之外,MSMQ 还将设置新的消息 ID、发送时间等。
这是一个额外的步骤,但如果您没有其他办法的话,这可能是一个解决方案。