1. 程式人生 > >《RabbitMQ》如何保證訊息不被重複消費

《RabbitMQ》如何保證訊息不被重複消費

## 一 重複訊息 為什麼會出現訊息重複?訊息重複的原因有兩個:1.生產時訊息重複,2.消費時訊息重複。 ### 1.1 生產時訊息重複 由於生產者傳送訊息給MQ,在MQ確認的時候出現了網路波動,生產者沒有收到確認,實際上MQ已經接收到了訊息。這時候生產者就會重新發送一遍這條訊息。 生產者中如果訊息未被確認,或確認失敗,我們可以使用定時任務+(redis/db)來進行訊息重試。 ```java @Component @Slf4J public class SendMessage { @Autowired private MessageService messageService; @Autowired private RabbitTemplate rabbitTemplate; // 最大投遞次數 private static final int MAX_TRY_COUNT = 3; /** * 每30s拉取投遞失敗的訊息, 重新投遞 */ @Scheduled(cron = "0/30 * * * * ?") public void resend() { log.info("開始執行定時任務(重新投遞訊息)");