在引擎盖下,FIFO队列如何以分布式方式转变为优先级队列?他们实际上是在交换底层数据结构,还是在“破解”修复
ylamdve61#
底层的数据结构是多个队列,每个队列都分配了一个优先级。每个队列都是一个Erlang VM进程。这就是为什么不建议优先级超过10个左右,因为性能会受到影响。如果您的负载足够轻,这可能是可以接受的。
gt0wga4j2#
当消息发布时带有priority头,具有较高优先级值的消息被放置在队列的头部。这是通过实际交换队列中的消息来实现的。当消息在队列中等待被使用时,这一切都将完成。为了让RabbitMQ能够对消息进行真正的优先级排序,请将消费者的basic.qos设置得尽可能低。因此,如果消费者连接到一个空队列,该队列的basic.qos未设置,并且消息随后将发布到该队列,则消息可能根本不会在队列中等待任何时间。在这种情况下,优先级队列将没有任何机会对它们进行优先级排序。参考:https://www.rabbitmq.com/priority.html
priority
basic.qos
2条答案
按热度按时间ylamdve61#
底层的数据结构是多个队列,每个队列都分配了一个优先级。每个队列都是一个Erlang VM进程。这就是为什么不建议优先级超过10个左右,因为性能会受到影响。如果您的负载足够轻,这可能是可以接受的。
gt0wga4j2#
当消息发布时带有
priority
头,具有较高优先级值的消息被放置在队列的头部。这是通过实际交换队列中的消息来实现的。当消息在队列中等待被使用时,这一切都将完成。为了让RabbitMQ能够对消息进行真正的优先级排序,请将消费者的basic.qos
设置得尽可能低。因此,如果消费者连接到一个空队列,该队列的basic.qos
未设置,并且消息随后将发布到该队列,则消息可能根本不会在队列中等待任何时间。在这种情况下,优先级队列将没有任何机会对它们进行优先级排序。参考:https://www.rabbitmq.com/priority.html