默認情況下如果有消息消費出錯后會一直重試,造成消息堵塞

如圖可觀察**unacked**和**total**一直是1,但**deliver/get**飆升
消息堵塞之后也影響到后續消息的消費,時間越長越來越多的消息將無法及時消費處理。
如果是單條或極少量的消息有問題可通過多開節點`concurrency`將正常的消息消息掉,但如果較多則全部節點都將堵塞。
如果想遇到消息消費報錯重試幾次就舍棄,從而不影響后續消息的消費,如何實現呢?
~~~yaml
spring:
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: admin
password: admin
listener:
simple:
concurrency: 5
prefetch: 10
retry:
enabled: true # 允許消息消費失敗的重試
max-attempts: 3 # 消息最多消費次數3次
initial-interval: 2000 # 消息多次消費的間隔2秒
~~~
以上配置允許消息消費失敗后重試3次,每次間隔2秒,如果還是失敗則直接舍棄掉本條消息。
重試可解決因非消息體本身處理問題產生的臨時性的故障,而將處理失敗的消息直接舍棄掉只是為其它消息正常處理的權益之計而以,將業務操作降到相對低的影響。