对于不能一致支持优先级消息的消息中间件(例如AMQP),当队列只有 FIFO 语义时,实现优先级消费的最佳方式是什么?一般用例是这样一个系统:当队列中存在大量积压消息时,消费者会先接收较高优先级的消息,然后再接收较低优先级的消息。
如果给定的单个队列仅支持 FIFO,您当然必须引入多个队列、中介或更复杂的消费者。
可以通过多种方式处理多个队列。生产者和消费者可以同意在它们之间有两个队列,一个用于高优先级,另一个用于后台任务。
如果您的生产者仅限于单个队列,但您可以控制消费者,请考虑在路径中引入扇出路由器。所以生产者->路由器是单个队列,然后路由器有两个队列到消费者。
解决这个问题的另一种方法(可能不太理想)是让您的消费者旋转一个线程来前置队列,然后在内部分派工作。类似于上面的路由器版本,但在单个应用程序内。这样做的缺点是应用程序内会包含多条消息,这可能会使发生故障时的恢复变得复杂。
不要忘记考虑有效的低优先级事件的饥饿,无论它们是什么,如果其中一些事件应该被处理,即使有更高优先级的事件仍然悬而未决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)