Spring Boot RabbitMQ快速入门 (2)
Prefetch设置
当我们进入RabbitMQ的GUI管理界面, 点入某个队列查看消费者的属性时, 有记录如下
| Channel | Consumer tag | Ack required | Exclusive | Prefetch count | Arguments |
|---|---|---|---|---|---|
| 172.22.0.1:57382 (1) | amq.ctag-Gsix2DEjaFI9zVlsJJZp3Q | ● | ○ | 1 | |
| 172.22.0.1:57378 (1) | amq.ctag-_FIcIOpflMXXaBQN7xLYcA | ● | ○ | 1 |
上面的表格说明消息的消费需要手工ack, 且是公平分发的. 设置prefetch的方式有两种
全局式设定
在application.yml文件中设定
spring.rabbitmq.listener.prefetch即可, 这会影响到本Spring Boot应用中所有使用默认SimpleRabbitListenerContainerFactory的消费者spring: rabbitmq: host: localhost username: chris password: 123123 virtual-host: prontera listener: prefetch: 100特定消费者设置
在消费者的配置中自定义一个
SimpleRabbitListenerContainerFactory@Bean public SimpleRabbitListenerContainerFactory myContainerFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setPrefetchCount(100); configurer.configure(factory, connectionFactory); return factory; }然后在消费者上声明使用该ContainerFactory即可达到对特定消费者配置prefetch的作用
@RabbitListener(queues = "#{rabbitConfiguration.TOPIC_QUEUE}", containerFactory = "myContainerFactory") public void processBootTask2(WorkUnit content) { System.out.println(content); }
Ack机制
Spring Boot Rabbit使用手工应答机制, 当@RabbitListener修饰的方法被调用且没有抛出异常时, Spring Boot会为我们自动应答. 否则会根据设定的重试机制而作出nack或reject等行为.
重试机制
重试分两种, template的重试与listener的重试, 分别代表生产者与消费者
生产者端的重试
spring:
rabbitmq:
template:
retry:
enabled: true
通过以上配置可以启动AmqpTemplate的重试机制, 例如与RabbitMQ连接丢失的时候将会自动重试事件的发布, 这个特性默认是关闭的
消费者端的重试
消费者一端, 即@RabbitListener也有像AmqpTemplate一样的重试机制, 当重试次数(默认是3)耗尽的时候, 该特性同样也是默认关闭的, 可以通过以下配置打开
spring:
rabbitmq:
host: localhost
username: chris
password: 123123
virtual-host: prontera
listener:
retry:

本文是Spring Boot RabbitMQ快速入门的第二部分,重点介绍了Prefetch设置,包括全局和特定消费者的配置。接着讨论了Ack机制,Spring Boot采用手工应答,异常时自动进行nack或reject。接着详细阐述了重试机制,包括生产者和消费者的重试配置,并提到了当重试次数耗尽时的消息处理,特别是死信队列的应用。最后,提到了队列定义不一致时的处理和Spring Boot RabbitMQ的Properties配置。
最低0.47元/天 解锁文章
1347

被折叠的 条评论
为什么被折叠?



