消息队列的调用延迟

本文关键字:延迟 调用 队列 消息 | 更新日期: 2023-09-27 18:35:22

我有一个现有的应用程序,它通过排队的传输将消息从一个进程发送到另一个进程。 我想通过延迟处理消息来改变消息的处理方式,并使队列更多地充当优先级队列,而应该首先在队列顶部执行操作的消息。

即:

在时间 0 时,消息 A 以 15 分钟的延迟发送到队列。5 分钟后,消息 B 以 10 分钟的延迟发送到队列。然后,处理队列的服务崩溃,并且在 15 分钟内不会重新启动。当队列再次开始处理时,消息 B 将位于顶部,然后是消息 A。

在C#/MSMQ/.NET生态系统中是否有这样的东西?

消息队列的调用延迟

如果你在Windows Azure上进行云编程,有一种方法可以解决这个问题。只需指定要放置消息的visibilitytimeout

从 http://msdn.microsoft.com/en-us/library/windowsazure/dd179346.aspx :

可见性超时=

自选。如果指定,则必须使用 2011-08-18 或更高版本的 x-ms 版本发出请求。如果未指定,则默认值为 0。指定相对于服务器时间的新可见性超时值(以秒为单位)。新值必须大于或等于 0,并且不能大于 7 天。消息的可见性超时不能设置为晚于到期时间的值。可见性超时应设置为小于生存时间值的值。

可选的可见性超时指定消息不可见的时间。超时到期后,消息将变为可见。如果未指定可见性超时,则使用默认值 0。

一种解决方案是使用另一个服务来计划消息。我们使用使用 Quartz API 和 Cron 表达式的 Windows 服务来调度作业。

  1. 我们的 Web 应用程序通过 IBM MQ 向调度程序服务发送消息以调度作业。

  2. 当作业被触发时,它会向相应的主题/队列发送另一条消息。