思路
MQ配置:
1.設置正常處理隊列及綁定關係,exchange,queue,key
2.創建5s延遲隊列queue_5s,10s延遲隊列queue_10s,20s延遲隊列queue_20s,差錯處理隊列queue_error,分別於exchange_delay綁定,設置routingKey分別爲key_5s,key_10s,key_20s,key_error
3.分別配置queue_5s,queue_10s,queue_20s的死信交換機爲exchange,routingKey爲key
代碼實現:
1.消息發送方正常投遞消息到exchange —> key(正常發送)
2.消息處理方式正常處理消息
3.消息處理方異常,則計算routingKey,進行投遞(可以將重試次數放入message head 或者直接使用message 的routingKey)
4.若消息投遞到queue_*s中,則過期後自動轉到 exchange —> key 到達 queue
5.若消息投遞到queue_error,則進行異常處理(報警或者其他之類)
此處亦可以使用單通道queue_delay,過期時間設置在消息message上,通道不設置過期,如下
新版本的rabbitMQ,安裝了插件rabbitmq_delayed_message_exchange後,可直接設置延遲投遞,如下