spring-boot - 正确使用 SpringRabbit DirectMessageListenerContainer 和 setConsumersPerQueue 属性
问题描述
我使用 DirectMessageListenerContainer 来监听各个队列,因为它会为每个队列创建一个消费者,如果说“queue1”上的消息需要一段时间来处理,而“queue2”上的消息可以快速处理,则可以防止队列饥饿。我对DirectMessageListenerContainer.setConsumersPerQueue方法感到困惑。默认值为 1 查看源代码。
在什么条件下需要将其增加到大于 1?如果保留默认值 1,如果 fetch size 大于 1,消息处理是否以多线程方式为给定队列完成?
DirectMessageListenerContainer
listenerContainer =
new DirectMessageListenerContainer(connectionFactory);
listenerContainer.setConsumersPerQueue(10);
listenerContainer.addQueueNames("queue1","queue2");
解决方案
是为了增加并发;例如,如果您的侦听器很慢,并且您不关心消息排序,则可以将多个消费者分配到同一个队列并并行处理消息。根据您的消息计数,您可能需要减少预取计数,以便一个使用者在启动期间不会“抓取”所有消息。
预取大小对并发没有影响;就是这样;预取。
推荐阅读
- excel - 数据透视表名称更改时将 pt 设置为新名称
- r - R Shiny:使用 assign() 组合反应输出元素的名称失败
- sql-server - 临时表 SYSTEM_TIME 范围不工作
- ruby-on-rails - 在 Rails 中更改给定字符串模式的元素样式
- c# - 在 c# 中使用 HttpWebRequest GET 调用获取 pdf
- sql - 蜂巢查询中的串联
- javascript - 如何在javascript中使用数组作为对象键?
- reactjs - 在周视图和日视图上反应大日历错误 - 'iteratee 不是函数'
- flutter - 连续显示 ListView 项
- c# - 从 C# 控制台应用程序调用 R 函数