成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么我不推薦你使用RabbitMQ的消息轉(zhuǎn)換功能

開(kāi)發(fā) 前端
發(fā)送消息與訂閱消息取消使用amqp提供的消息序列化與反序列化功能,使用String類型,發(fā)送消息時(shí)手動(dòng)轉(zhuǎn)化為json字符串再發(fā)送,消費(fèi)消息時(shí)手動(dòng)json反序列化。

[[409095]]

改版:

發(fā)送消息與訂閱消息取消使用amqp提供的消息序列化與反序列化功能,使用String類型,發(fā)送消息時(shí)手動(dòng)轉(zhuǎn)化為json字符串再發(fā)送,消費(fèi)消息時(shí)手動(dòng)json反序列化。

背景:

如果使用自動(dòng)序列化與反序列化功能,即給Rabbitmq配置Jackson2JsonMessageConverter消息轉(zhuǎn)化器,當(dāng)我們修改消息Body的java類型名稱或者包名時(shí),消費(fèi)歷史消息就會(huì)拋出ClassNotFoundException異常。

1、不做兼容上線,但需要:

  • 確保不會(huì)有新的消息進(jìn)入隊(duì)列;
  • 確保隊(duì)列中的消息已經(jīng)消費(fèi)完。

2、粗暴方式,直接清空隊(duì)列,丟棄歷史消息;

3、做兼容,給舊消息創(chuàng)建一個(gè)類名匹配的消息Body類型,添加一個(gè)@RabbitHandler方法處理舊消息。

這是因?yàn)镽abbitmq為了實(shí)現(xiàn)一個(gè)隊(duì)列支持多個(gè)方法消費(fèi)(即@RabbitHandler注解的方法),每個(gè)方法消費(fèi)不同Java類型的消息Body,在消費(fèi)到消息時(shí),就需要先反序列化出消息Body,才能根據(jù)消息Body的類型去匹配一個(gè)消費(fèi)方法消費(fèi)消息,如DelegatingInvocableHandler#invoke方法源碼所示。

  1. // org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler#invoke 
  2. public InvocationResult invoke(Message<?> message, Object... providedArgs) throws Exception {  
  3.    // 獲取消息body類型 
  4.    Class<? extends Object> payloadClass = message.getPayload().getClass(); 
  5.    // 匹配的方法 
  6.    InvocableHandlerMethod handler = getHandlerForPayload(payloadClass); 
  7.    // 調(diào)用方法消費(fèi) 
  8.    Object result = handler.invoke(message, providedArgs); 
  9.    //.... 

由于需要在匹配消息消費(fèi)方法之前就需要解析出消息Body,也就是要先知道消息Body的Java類型才能實(shí)現(xiàn)json反序列化,這就要求消息生產(chǎn)者在發(fā)送消息時(shí)不得不在消息頭添加一個(gè)參數(shù)表示消息Body的Java類型,如下圖所示。

在消息消費(fèi)階段,Jackson2JsonMessageConverter也需要先根據(jù)消息頭的TypeId獲取JavaType,再執(zhí)行反序列化操作,當(dāng)類名修改時(shí),或者生產(chǎn)者和消費(fèi)者各自定義的類名不同,都將會(huì)導(dǎo)致反序列化失敗。

除非確保消息Body的類名不會(huì)變,且生產(chǎn)者與消費(fèi)者定義的完整類名相同,否則不建議使用自動(dòng)序列化與反序列化功能。

本文轉(zhuǎn)載自微信公眾號(hào)「Java藝術(shù)」,作者wujiuye 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java藝術(shù)公眾號(hào)。  

 

責(zé)任編輯:武曉燕 來(lái)源: Java藝術(shù)
相關(guān)推薦

2022-05-17 14:28:42

編程語(yǔ)言Julia代碼

2021-06-25 11:19:04

LinuxWindows操作系統(tǒng)

2024-11-29 08:20:22

Autowired場(chǎng)景項(xiàng)目

2020-04-01 17:50:02

Python編程語(yǔ)言

2015-07-03 09:37:21

程序員外包公司

2020-12-24 18:46:11

Java序列化編程語(yǔ)言

2024-11-12 10:30:54

Docker部署數(shù)據(jù)庫(kù)

2024-06-04 00:10:00

開(kāi)發(fā)拷貝

2021-06-09 11:28:04

用戶畫(huà)像標(biāo)簽

2022-12-28 11:44:19

用戶畫(huà)像互聯(lián)網(wǎng)用戶信息

2023-11-01 11:34:40

用戶畫(huà)像企業(yè)

2025-05-16 02:00:00

HashMapJava代碼

2024-09-12 08:32:42

2020-05-25 10:05:26

Python 開(kāi)發(fā)程序員

2023-11-06 13:04:59

Python日志庫(kù)

2021-08-23 13:02:50

MySQLJOIN數(shù)據(jù)庫(kù)

2022-01-11 10:29:32

Docker文件掛載

2023-01-24 16:13:22

編程語(yǔ)言JavaIT

2016-10-11 16:31:56

微信服務(wù)器消息

2025-04-29 07:06:20

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产激情 | 日韩成年人视频在线 | 精品国产一区二区三区久久 | 久久久久一区二区三区 | 男人天堂网址 | 一级片在线视频 | 欧美日韩一区在线 | 瑞克和莫蒂第五季在线观看 | 亚洲影视在线 | 91视频亚洲| 97精品超碰一区二区三区 | 99re热精品视频 | 久草视频在线播放 | 一级黄色生活视频 | 欧美一级大片免费看 | 国产精品久久 | 日韩有码一区 | 国产免费一区二区三区 | 成人黄色av| 在线观看亚洲 | 亚洲电影在线播放 | 亚洲一区二区 | www.亚洲精品 | 在线观看www视频 | 美美女高清毛片视频免费观看 | 波多野结衣在线观看一区二区三区 | 久草久草久草 | 91中文字幕在线观看 | 99精品视频在线 | 成人国产午夜在线观看 | 欧美色图综合网 | 香蕉视频黄色 | 欧美一级二级在线观看 | 亚洲乱码国产乱码精品精98午夜 | 国产精品国产 | 日韩精品二区 | 夜夜精品浪潮av一区二区三区 | 美女毛片免费看 | 国产精品永久免费视频 | 欧美午夜一区二区三区免费大片 | 国产精品美女久久久久久免费 |