rabbitmq系列(四)死信佇列
阿新 • • 發佈:2020-03-23
## 一、什麼是死信佇列
當訊息在一個佇列中變成一個死信之後,它將被重新publish到另一個交換機上,這個交換機我們就叫做死信交換機,私信交換機將死信投遞到一個佇列上就是死信佇列。具體原理如下圖:
![死信交換機.png](https://img2020.cnblogs.com/other/1719198/202003/1719198-20200323092450941-207669488.png)
訊息變成死信的三種情況:
- 訊息被拒絕(basic.reject / basic.nack),並且requeue = false
- 訊息TTL過期
- 佇列達到最大長度
## 二、手動簽收應答模式
應答模式分為兩種,手動簽收和自動簽收,自動應答就是消費者消費了一條訊息就自動告訴佇列刪除訊息。這樣的弊端就是不管消費邏輯有沒有成功,都會將訊息刪除,這樣就會造成訊息丟失。而使用手動簽收後,就是在消費邏輯處理成功後,手動告訴佇列消費成功,然後佇列再去刪除這條訊息。
1. 再消費者配置檔案中開啟手動簽收模式
```java
spring.rabbitmq.listener.simple.acknowledge-mode = manual
```
2. 在消費邏輯處理成功後手動簽收,修改消費者程式碼
```java
@RabbitListener(queues = QUEUE_NAME)
public void receiveMessage(Message message,@Hea