正文–rabbitMQ高级篇
1. rabbitMQ的工作模式:
(1)简单模式【一个生产者和一个消费者和一个队列】
(2)工作者模式【一个生产者和多个消费者和一个队列,多个消费者之间是竞争关系】
(3)发布订阅模式[【一个生产者和多个消费者和多个队列和一个交换机】]
(4)路由模式
(5)topic
2. springboot整合rabbitMQ
rabbitTemplate----发送功能
@RabbitListener:
1.消息可靠性投递
在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。
消息投递步骤:
生产者(channel)---->交换机------>队列中。
为了确保消息的可靠性投递,提供了如下两种方式
confirm 确认模式
return 退回模式
(1)确认模式
必须开启确认模式
spring:
rabbitmq:
host: 192.168.213.188
#开启rabbitMQ的生产方确认模式
publisher-confirm-type: correlated
设置RabbitTemplate的确认回调函数
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 保证发送方到交换机的可靠性。
* 1.开启confirm模式,publisher-confirm-type: correlated
* 2.设置rabbitTemplate的确认回调函数。如果消息到达交换机则返回true,如果消息没有到达交换机则返回一个false
*/
@Test
public void testConfirm(){
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean b, String s) {
if(b==false){
//消息没有到达交换机 根据业务需求。
System.out.println("继续发现消息");
//取消订单
}
}
});
rabbitTemplate.convertAndSend("ban129_exchange","","hello confirm");
}
(2)退回模式
(1)开启回退机制
server:
port: 8001
spring:
rabbitmq:
host: 192.168.213.188
#开启rabbitMQ的生产方确认模式
publisher-confirm-type: correlated
# 开启发布者退回模式
publisher-returns: true
(2)设置RabbitTemplate回调的函数
/**
* 退回模式:
* 1. 开启退回模式。
* 2. 设置RabbitTemplate的退回回调函数。
*/
@Test
public void testReturn(){
rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {
@Override
public void returnedMessage(ReturnedMessage returnedMessage) {
//只要交换机到队列失败时才会触发该方法。 可以继续发送也可以取消相应的业务功能。
System.out.println("消息从交换机到队列失败"+returnedMessage.getReplyText());
}
});
rabbitTemplate.convertAndSend("ban129_exchange_direct","error2","hello confirm2");
}