RabbitMQ:RabbitMQ 延遲隊列插件強制調用 ReturnCallback 裏 returnedMessage 方法

問題描述:

  使用了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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章