rabbitMQ 延遲佇列外掛強制呼叫ReturnCallback裡returnedMessage方法
報錯資訊
訊息被伺服器退回。msg:�� sr java.lang.Integer⠤���8 I valuexr java.lang.Number������ xp
, replyCode:312. replyText:NO_ROUTE, exchange:my-mq-exchange_D, routingKey :spring-boot-routingKey_D
[RabbitMQ 訊息傳送結果:] 成功!訊息唯一標識:b58e22fb-aa2b-4eb4-b8d4-6465fc26dd40
問題描述:
使用了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);
}
參考來源:https://my.oschina.net/xiaominmin/blog/4503811
相關文章
- Delayed Message 外掛實現 RabbitMQ 延遲佇列MQ佇列
- RabbitMQ實戰《延遲佇列》MQ佇列
- RabbitMQ 實現延遲佇列MQ佇列
- RabbitMQ實現延遲佇列MQ佇列
- Spring Boot(十四)RabbitMQ延遲佇列Spring BootMQ佇列
- 使用RabbitMq原生實現延遲佇列MQ佇列
- RabbitMQ、RocketMQ、Kafka延遲佇列實現MQKafka佇列
- Golang 實現 RabbitMQ 的延遲佇列GolangMQ佇列
- 如何用RabbitMQ實現延遲佇列MQ佇列
- 【RabbitMQ】一文帶你搞定RabbitMQ延遲佇列MQ佇列
- docker安裝rabbitmq和延遲外掛DockerMQ
- 基於rabbitmq延遲外掛實現分散式延遲任務MQ分散式
- redis 延遲佇列Redis佇列
- Laravel 延遲佇列Laravel佇列
- 延時佇列(RabbitMQ)佇列MQ
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- 基於訊息佇列(RabbitMQ)實現延遲任務佇列MQ
- 延遲阻塞佇列 DelayQueue佇列
- hyperf redis延遲佇列Redis佇列
- RabbitMQ 學習筆記 -- 12 死信佇列 DLX + TTL 方式實現延遲佇列MQ筆記佇列
- RabbitMQ:偽延時佇列MQ佇列
- [Redis]延遲訊息佇列Redis佇列
- RabbitMQ延時佇列的使用MQ佇列
- 如何才能讓Spring Boot與RabbitMQ結合實現延遲佇列Spring BootMQ佇列
- 訊息佇列-一篇讀懂rabbitmq(生命週期,confirm模式,延遲佇列,叢集)佇列MQ模式
- 使用 RabbitMQ 實現延時佇列MQ佇列
- 一張圖帶你理解和實現RabbitMQ的延遲佇列功能MQ佇列
- Node.js結合RabbitMQ延遲佇列實現定時任務Node.jsMQ佇列
- netcore下RabbitMQ佇列、死信佇列、延時佇列及小應用NetCoreMQ佇列
- laravel佇列實戰詳細記錄,含demo(任務鏈呼叫,延遲呼叫)Laravel佇列
- 我們一起來學RabbitMQ 三:RabbiMQ 死信佇列,延遲佇列,持久化等知識點MQ佇列持久化
- php+redis實現延遲佇列PHPRedis佇列
- RabbitMQ 延遲佇列實現訂單支付結果非同步階梯性通知MQ佇列非同步
- 基於Dynomite的分散式延遲佇列MIT分散式佇列
- RabbitMQ延遲訊息的延遲極限是多少?MQ
- 你知道Redis可以實現延遲佇列嗎?Redis佇列
- 高可用延遲佇列設計與實現佇列
- RabbitMQ使用 prefetch_count優化佇列的消費,使用死信佇列和延遲佇列實現訊息的定時重試,golang版本MQ優化佇列Golang