如何为此队列使用者设置预取计数?
@Bean
public Queue eventQueue(AmqpAdmin amqpAdmin) {
Queue queue = QueueBuilder.durable(EVENT_QUEUE_NAME)
...
.build();
TopicExchange topicExchange = new TopicExchange(TOPIC_EXCHANGE, true, false);
amqpAdmin.declareBinding(BindingBuilder
.bind(queue)
.to(topicExchange)
.with(EVENT_ROUTING_KEY));
return queue;
}
文档指出,这是一个容器配置,但在我的factory bean上设置它不起作用,默认值为250:
@Bean
public SimpleRabbitListenerContainerFactory containerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPrefetchCount(10); // doesn't work; defaults to 250
return factory;
}
更新
根据@GaryRussell下面的评论,我测试了默认的rabbitListenerContainerFactory,还验证了我的Spring Boot配置。rabbitmq。听众。易于理解的预取正在AbstractRabbitListenerContainerFactoryConfigurer中使用。但是,当我查看RabbitMQ中的队列使用者时,我可以看到我使用默认容器设置定义的队列仍然具有250的预取计数:
我使用RabbitMQ管理面板作为真相的来源。我不认为这是在撒谎,因为我有一堆使用自定义容器实例化的动态队列,并且它们确实具有非默认(正确)的prefetchCount
s。我还在Spring容器启动中验证了只有一个(预期)RabbitListenerContainerFactory
bean。
预回迁不是队列属性,而是使用者属性。
你的听众长什么样?
您正在为容器工厂使用非标准名称。
您要么需要将容器工厂
属性添加到@RabbitListener
,要么需要将您的bean重命名为RabbitListenerContainerFactory
(覆盖Boot定义的工厂@Bean
)。
而且
amqpAdmin.declareBinding(BindingBuilder
您不应该在bean定义中与经纪人交谈——现在还为时过早。
只需将队列、交换和绑定添加为Bean,您也可以在应用程序中设置预取。属性/yaml文件(如果使用Spring Boot)。管理员将在第一次打开连接时找到并声明它们。
编辑
还有别的事情。。。
@SpringBootApplication
public class So62049769Application {
public static void main(String[] args) {
SpringApplication.run(So62049769Application.class, args);
}
@Bean
public Queue queue() {
return new Queue("so62049769");
}
@RabbitListener(queues = "so62049769")
public void listen(String in) {
System.out.println(in);
}
}
spring.rabbitmq.listener.simple.prefetch=42
在SNS话题上设置死信队列和在Lambda功能上设置死信队列有什么区别? 我在想,因为如果您在SNS订阅上设置DLQ,那么当Lambda(订阅者)失败时,订阅消息将故障转移到DLQ,对吗?那么在这种情况下,在这两个地方设置DLQ会有相同的效果吗? 我在SNS主题订阅上设置了一个DLQ,它并没有“自动”地显示为Lambda屏幕设置上的DLQ,所以我想可能会有一些不同? SNS死信队列ref:http
问题内容: 也许这是一个愚蠢的问题,但我似乎找不到一个明显的答案。 我需要一个仅包含唯一值的并发FIFO队列。尝试添加队列中已经存在的值只会忽略该值。如果不是为了线程安全,那将是微不足道的。在Java中是否存在数据结构,或者在Interweb上是否存在代码snipit表现出这种行为? 问题答案: 如果您想要比完全同步更好的并发性,那么我知道有一种方法可以使用ConcurrentHashMap作为支
(在iQueueBrowser.GetEnumerator上进行了探索,但它会将消息下载到客户端。)
这可能是Websphere MQ中的权限问题吗? 我运行了ALTER QMGR CHLAUTH(禁用)以排除任何权限问题(我希望如此)。 代理服务
问题内容: 我的ActiveMQ服务器中目前有一个名为的队列。每当消息处理失败时,ActiveMQ都会创建一个默认目录。是否可以将该名称更改为类似的名称?原因是将来我可能会有几个队列,而我希望它像 问题答案: 您要查找的东西称为,在此过程中,ActiveMQ为每个队列/主题创建特定的DLQ, 您可以按如下,通过调整你实现它有点 此配置将创建名称为的DLQ ,如果您不需要前缀,则可以删除属性。 希望
问题内容: 如何同时在多个对象上“选择” ? Golang的频道具有所需的功能: 其中第一个要解除阻塞的通道执行相应的块。如何在Python中实现? 更新0 根据tux21b答案中给出的链接,所需的队列类型具有以下属性: 多生产者/多消费者队列(MPMC) 提供每个生产者FIFO / LIFO 当队列为空/完整的消费者/生产者被阻止时 此外,渠道可能会被阻塞,生产者将阻塞,直到消费者取回该物品为止