問題描述:
使用了x-delayed-message 延遲插件,結果每次都強制觸發returnedMessage回調方法????
解決方案:
如果配置了發送回調ReturnCallback,插件延遲隊列則會回調該方法,因爲發送方確實沒有投遞到隊列上,只是在交換器上暫存,等過期時間到了 纔會發往隊列。
並非是BUG,而是有原因的,建議利用if 去攔截這個異常,判斷延遲隊列交換機名稱,然後break;
@Override public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { //請注意!如果你使用了延遲隊列插件,那麼一定會調用該callback方法,因爲數據並沒有提交上去,而是提交在交換器中,過期時間到了才提交上去,並非是bug!你可以用if進行判斷交換機名稱來捕捉該報錯 if(exchange.equals(RabbitConfig.EXCHANGE_D)){ return; } logger.info("消息被服務器退回。msg:{}, replyCode:{}. replyText:{}, exchange:{}, routingKey :{}", new String(message.getBody()), replyCode, replyText, exchange, routingKey); }