??在使用RabbitMQ的時候,訊息生產者發送訊息不希望出現訊息丟失或者投遞失敗的現象;
??RabbitMQ在訊息投遞可靠性方面給我們提供了兩種模式;
????1,confirm確認模式
????2,return 退回模式
confirm確認模式介紹以及實作
??confirm機制,訊息的確認,是指生產者投遞訊息之后,如果Broker收到訊息,則會給生產者一個應答,生產者能接收應答,用來確定這條訊息是否正常的發送到Broker,這種機制是訊息可靠性投遞的核心保障,
??confirm機制是只保證訊息到達exchange,并不保證訊息可以路由到正確的queue,如果exchange錯誤,就會觸發confirm機制
??1、組態檔設定
# 開啟confirm模式
spring.rabbitmq.publisher-confirm-type=correlated
??2、com.java996.producer.Service.impl.RabbitMqServiceImpl實作RabbitTemplate.ConfirmCallback介面,實作confirm方法
@Service("RabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService, RabbitTemplate.ConfirmCallback{
/**
*
* @param correlationData 訊息唯一標識
* @param ack 交換機是否成功收到訊息 true成功 false失敗
* @param cause 失敗原因
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("confirm方法被執行..."+correlationData.getId());
if(ack){
System.out.println("交換機 訊息接收成功"+cause);
}else{
System.out.println("交換機 訊息接收失敗"+cause);
// 這里我們需要做一些訊息補發措施
}
}
......
}
??3、注入RabbitTemplate模版
@Autowired
private RabbitTemplate rabbitTemplate;
??4、初始化設定
@PostConstruct
public void init(){
rabbitTemplate.setConfirmCallback(this);
}
??5、發送資料測驗
@Override
public void sendMessage(String message) {
CorrelationData correlationData = new CorrelationData("1");
rabbitTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE,RabbitMqConfig.DIRECT_ROUTINGKEY,message,correlationData);
}
??6、啟動測驗:
package com.java996.producer;
import com.java996.producer.Service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class ProducerApp {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ProducerApp.class,args);
RabbitMqService rabbitMqService = (RabbitMqService) context.getBean("RabbitMqService");
rabbitMqService.sendMessage("confirm確認測驗");
}
}
??7、控制臺:

??8、佇列:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289518.html
標籤:其他
