亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當rabbit監聽器拋出異常時,無法修改spring-amqp中的rabbitmq消息

當rabbit監聽器拋出異常時,無法修改spring-amqp中的rabbitmq消息

尚方寶劍之說 2023-07-19 16:52:21
我有一個 Spring 應用程序,我們使用 spring-amqp 發布和監聽來自 Rabbitmq 的消息。如果我的監聽器拋出異常,我想修改我的 Rabbitmq 消息。當偵聽器拋出異常時,將使用恢復器和重試處理程序將其重新捕獲。我正在修改偵聽器類中存在的 catch 塊中的消息。一旦消息被修改,我就會拋出異常,以便在一段固定的時間后再次重試該消息。這是我用來修改消息的代碼。public void onMessage(Message message, Channel channel) throws Exception{        try        {            if(message.getMessageProperties().getHeaders().get("x-retried-header") != null)//self defined header            {                throw new MyException();            }            else            {                //some logic            }        }        catch(MyException e)        {            MyClass myObject = new MyClass();            myObject.setMessage("Hello Message Is Being Retried");            MessageProperties properties = message.getMessageProperties();            properties.setHeader("x-retried-header", 1);            message = MessageBuilder.withBody(myObject.toByteArray()).andProperties(properties).build();            throw new Exception();        }    }當我的恢復程序收到 RabbitMq 消息時,消息正文沒有更改,而我添加到修改后的消息中的標頭正在正確反映。我還可以在兔子處理程序中處理或修改我的消息,但我不想更改恢復程序和重試處理程序中的任何內容,因為其他偵聽器也使用了這些處理程序。有人可以幫我解決這個問題嗎?為什么我收到的是原始消息正文而不是修改后的消息正文?Spring-amqp 在這里使用任何克隆對象嗎?當偵聽器拋出異常時,是否有其他方法可以使用 spring-amqp 修改我的 RabbitMq 消息正文?
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

消息正文一旦發送到 RabbitMQ 隊列,就無法修改。

如果它被消費者接受,即沒有錯誤,它就會從隊列中刪除該消息。如果消費者沒有正確使用它,即發生錯誤,RabbitMQ 會重新排隊消息(如果啟用了自動重新排隊)。

解決方法:

您可以通知 RabbitMQ 消息已成功消費,但您可以克隆消息并將消息作為新消息重新發送。

希望能幫助到你。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號