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

為什么我不推薦你使用RabbitMQ的消息轉換功能

開發 前端
發送消息與訂閱消息取消使用amqp提供的消息序列化與反序列化功能,使用String類型,發送消息時手動轉化為json字符串再發送,消費消息時手動json反序列化。

[[409095]]

改版:

發送消息與訂閱消息取消使用amqp提供的消息序列化與反序列化功能,使用String類型,發送消息時手動轉化為json字符串再發送,消費消息時手動json反序列化。

背景:

如果使用自動序列化與反序列化功能,即給Rabbitmq配置Jackson2JsonMessageConverter消息轉化器,當我們修改消息Body的java類型名稱或者包名時,消費歷史消息就會拋出ClassNotFoundException異常。

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

  • 確保不會有新的消息進入隊列;
  • 確保隊列中的消息已經消費完。

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

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

這是因為Rabbitmq為了實現一個隊列支持多個方法消費(即@RabbitHandler注解的方法),每個方法消費不同Java類型的消息Body,在消費到消息時,就需要先反序列化出消息Body,才能根據消息Body的類型去匹配一個消費方法消費消息,如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.    // 調用方法消費 
  8.    Object result = handler.invoke(message, providedArgs); 
  9.    //.... 

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

在消息消費階段,Jackson2JsonMessageConverter也需要先根據消息頭的TypeId獲取JavaType,再執行反序列化操作,當類名修改時,或者生產者和消費者各自定義的類名不同,都將會導致反序列化失敗。

除非確保消息Body的類名不會變,且生產者與消費者定義的完整類名相同,否則不建議使用自動序列化與反序列化功能。

本文轉載自微信公眾號「Java藝術」,作者wujiuye 。轉載本文請聯系Java藝術公眾號。  

 

責任編輯:武曉燕 來源: Java藝術
相關推薦

2022-05-17 14:28:42

編程語言Julia代碼

2021-06-25 11:19:04

LinuxWindows操作系統

2015-07-03 09:37:21

程序員外包公司

2024-11-29 08:20:22

Autowired場景項目

2020-12-24 18:46:11

Java序列化編程語言

2020-04-01 17:50:02

Python編程語言

2024-06-04 00:10:00

開發拷貝

2024-11-12 10:30:54

Docker部署數據庫

2021-06-09 11:28:04

用戶畫像標簽

2022-12-28 11:44:19

用戶畫像互聯網用戶信息

2023-11-01 11:34:40

用戶畫像企業

2025-05-16 02:00:00

HashMapJava代碼

2024-09-12 08:32:42

2023-11-06 13:04:59

Python日志庫

2020-05-25 10:05:26

Python 開發程序員

2021-08-23 13:02:50

MySQLJOIN數據庫

2022-01-11 10:29:32

Docker文件掛載

2023-01-24 16:13:22

編程語言JavaIT

2016-10-11 16:31:56

微信服務器消息

2025-04-29 07:06:20

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲丝袜天堂 | 欧美精品区 | 99久久精品免费看国产小宝寻花 | 亚洲一区二区精品视频 | 国产成人网 | 精品国产伦一区二区三区观看方式 | 黄色一级视频 | 中文字幕在线播放不卡 | 粉嫩粉嫩芽的虎白女18在线视频 | 日韩欧美一二三区 | 久久久91精品国产一区二区三区 | 久久久精品一区 | 国产精品99久久久久久久久久久久 | 亚洲精品久久区二区三区蜜桃臀 | 亚洲精品乱码 | 国产成人av在线 | 在线免费观看黄色网址 | av不卡一区 | 一区二区三区精品在线视频 | 成人毛片网| 久久午夜视频 | 国产欧美精品一区二区色综合 | 91久久| 亚洲欧美一区二区三区1000 | 国产精品jizz在线观看老狼 | 狠狠插狠狠操 | 在线中文字幕第一页 | 人操人人| 亚州成人 | 国产一二三视频在线观看 | 操操操日日日 | 午夜三级视频 | 亚洲免费网 | 91 在线 | 欧美成人视屏 | 亚洲一区视频在线 | 欧美一区二区三区精品免费 | 91亚洲精品国偷拍自产在线观看 | 欧美国产精品 | 国产一区二区三区不卡av | 欧美日韩一区二区在线播放 |