java - rabbit mq 中的队列长时间处于空闲状态
问题描述
在 rabbitmq 服务中,我配置了 8 个队列,我使用 spring 客户端向 rabbit MQ 发送消息,我可以将消息发送到各个队列,但大多数时候只有一个队列在运行,其余队列处于空闲状态,为了让所有队列轮流我已将配置的预取计数减少到 20,因此所有消息都不会发送到工作人员(消费者)并导致其他队列保持空闲,尽管如此我不这样做'没有看到并行运行的多个队列。
下面是我用来设置预取计数的弹簧配置
@Bean
public CachingConnectionFactory rabbitConnectionFactory() throws Exception
{
com.rabbitmq.client.ConnectionFactory factory = new com.rabbitmq.client.ConnectionFactory();
factory.setHost(host);
factory.setUsername(username);
factory.setPassword(password);
factory.setPort(5671);
factory.useSslProtocol();
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(factory);
return connectionFactory;
}
我对每个队列都有不同的多个容器工厂,其中一些在下面提到。(不确定我们为什么使用工厂,我的假设是给队列提供预取等配置)
@Bean(name = "ordersimplecontainer")
public SimpleRabbitListenerContainerFactory simpleOrderListenerContainerFactory() throws Exception
{
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(rabbitConnectionFactory());
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConcurrentConsumers(6);
factory.setMaxConcurrentConsumers(8);
factory.setPrefetchCount(20);
return factory;
}
@Bean(name = "productsimplecontainer")
public SimpleRabbitListenerContainerFactory simpleProductListenerContainerFactory() throws Exception
{
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(rabbitConnectionFactory());
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConcurrentConsumers(3);
factory.setMaxConcurrentConsumers(4);
factory.setPrefetchCount(20);
return factory;
}
在侦听器代码中,我正在传递相应的连接工厂,如下所示
@RabbitListener( queues = "<queueName>", containerFactory = "<factoryName>", autoStartup = "${autocreateworker}")
public void myListener(SftpStockDailySyncAsyncRequest sftpStockDailySyncRequest) {
}
我遇到的问题是在任何给定时间只有一个队列正在运行,而其他队列处于空闲状态,并且由于这个重要的队列正在等待它们有机会进入运行状态,下面的屏幕描述了该场景。
请纠正我如何解决此问题。
截至目前,我有两台工作机器正在监听 RabbitMQ 服务器。
解决方案
推荐阅读
- python - asyncio 方法不异步执行
- sql - 通过 API 进行数据库同步 - Postgresql
- javascript - Magento 2.4.1:未捕获的错误:Object 处的 [object Object]。
(default.js:847) - angular - 在同一个组件中使用 2 个发射器是不可能的
- sql-server - 如何在不使用函数的情况下使用 MS SQL 查询查找在文本中定义的硬编码值
- python - Python 2 检测到除了块之外的异常,但不是 Python 3
- flutter - 在小部件后面传播点击
- coldfusion - 如何编译我的 ColdFusion 代码以进行无源分发,并且让它不可读?
- python - 将字典列表转换为仅包含选定项目的单个字典
- java - Java + Spring + Vault:密码中的汉字,变成了“???” 在应用程序中