第十章 高階特性-RabbitMQ訊息可靠性投遞+消費
阿新 • • 發佈:2021-11-17
第1集 高階知識點之RabbitMQ訊息可靠性投遞講解
簡介:Rabbitmq的訊息可靠性投遞講解
-
什麼是訊息的可靠性投遞
-
保證訊息百分百發送到訊息佇列中去
-
詳細
- 保證mq節點成功接受訊息
- 訊息傳送端需要接受到mq服務端接受到訊息的確認應答
- 完善的訊息補償機制,傳送失敗的訊息可以再感知並二次處理
-
-
RabbitMQ訊息投遞路徑
-
生產者-->交換機->佇列->消費者
-
通過兩個的點控制訊息的可靠性投遞
-
生產者到交換機
- 通過confirmCallback
-
交換機到佇列
- 通過returnCallback
-
-
-
建議
- 開啟訊息確認機制以後,保證了訊息的準確送達,但由於頻繁的確認互動, rabbitmq 整體效率變低,吞吐量下降嚴重,不是非常重要的訊息真心不建議用訊息確認機制
第2集 新版RabbitMQ訊息可靠性投遞confirmCallback實戰
簡介:Rabbitmq的訊息可靠性投遞confirmCallback實戰
-
生產者到交換機
- 通過confirmCallback
- 生產者投遞訊息後,如果Broker收到訊息後,會給生產者一個ACK。生產者通過ACK,可以確認這條訊息是否正常傳送到Broker,這種方式是訊息可靠性投遞的核心
-
開啟confirmCallback
xxxxxxxxxx
#舊版,確認訊息傳送成功,通過實現ConfirmCallBack介面,訊息傳送到交換器Exchange後觸發回撥
spring.rabbitmq.publisher-confirms=true
#新版,NONE值是禁用釋出確認模式,是預設值,CORRELATED值是釋出訊息成功到交換器後會觸發回撥方法
spring.rabbitmq.publisher-confirm-type: correlated
-
開發實戰
xxxxxxxxxx
@Autowired
private RabbitTemplate template;
@Test
void testConfirmCallback() {
template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
/**
*
* @param correlationData 配置
* @param ack 交換機是否收到訊息,true是成功,false是失敗
* @param cause 失敗的原因
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("confirm=====>");
System.out.println("confirm==== ack="+ack);
System.out.println("confirm==== cause="+cause);
//根據ACK狀態做對應的訊息更新操作 TODO
}
});
template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME+,"order.new","新訂單來啦1");
}
-
模擬異常:修改投遞的交換機名稱
未完待續!!!(明天更新)