可靠性
生产者重连
spring:
rabbitmq:
addresses: localhost:5672 # RabbitMQ服务地址
virtual-host: / # RabbitMQ虚拟主机
username: admin # RabbitMQ用户名
password: sdr@sdr_rabbitmq # RabbitMQ密码
listener:
simple:
prefetch: 1 # 每次只接收一条消息,处理完后再接收下一条消息
template:
retry:
enabled: true
initial-interval: 1000 # 重试间隔时间
max-attempts: 3 # 最大重试次数
multiplier: 1 # 重试时间间隔倍数,即第一次重试间隔为1000ms,第二次为2000ms,第三次为3000ms
生产者确认
RabbitMQ有两种确认机制:Publisher Confirm和Publisher Return。开启确认机制后,在MQ成功收到消息后会返回确认消息给生产者,返回结果有以下几种情况。
消息投递到MQ,但是路由失败,此时会通过PublisherReturn返回路由异常原因,然后返回
ACK
,告知投递成。临时消息投递到MQ,并且入队成功,返回
ACK
,告知投递成功。持久化消息投递到MQ,并且入队完成持久化,返回
ACK
,告知投递成功。其它情况都会返回NACK,告知投递失败。
spring:
rabbitmq:
addresses: localhost:5672 # RabbitMQ服务地址
virtual-host: / # RabbitMQ虚拟主机
username: admin # RabbitMQ用户名
password: sdr@sdr_rabbitmq # RabbitMQ密码
listener:
simple:
prefetch: 1 # 每次只接收一条消息,处理完后再接收下一条消息
template:
retry:
enabled: true
initial-interval: 1000 # 重试间隔时间
max-attempts: 3 # 最大重试次数
multiplier: 1 # 重试时间间隔倍数,即第一次重试间隔为1000ms,第二次为2000ms,第三次为3000ms
publisher-confirm-type: correlated # 开启发送确认
publisher-returns: true # 开启消息发送失败返回队列
// 2. 给Future对象设置回调函数
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (ack) {
System.out.println("消息发送成功");
} else {
System.out.println("消息发送失败");
}
});
// 3. 发送消息
rabbitTemplate.convertAndSend("work.exchange", "work.routing.key", "hello world", correlationData);
数据持久化
RabbitMQ 实现数据持久化包括三个方面:
交换机持久化
队列持久化
消息持久化
最后更新于
这有帮助吗?