RabbitMQ学习之messageconver插件实现(Gson)
RabbitMQ已经实现了Jackson的消息转换(Jackson2JsonMessageConverter),由于考虑到效率,如下使用Gson实现消息转换。
如下消息的转换类的接口MessageConverter,Jackson2JsonMessageConverter的父类AbstractJsonMessageConverter针对json转换的基类。
我们实现Gson2JsonMessageConverter转换类也继承AbstractJsonMessageConverter。
引入Gson的pom
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>2.3</version>
- </dependency>
转换类实现如下:
- package cn.slimsmart.rabbitmq.demo.spring.tag;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.springframework.amqp.core.Message;
- import org.springframework.amqp.core.MessageProperties;
- import org.springframework.amqp.support.converter.AbstractJsonMessageConverter;
- import org.springframework.amqp.support.converter.ClassMapper;
- import org.springframework.amqp.support.converter.DefaultClassMapper;
- import org.springframework.amqp.support.converter.MessageConversionException;
- import com.google.gson.Gson;
- public class Gson2JsonMessageConverter extends AbstractJsonMessageConverter {
- private static Log log = LogFactory.getLog(Gson2JsonMessageConverter.class);
- private static ClassMapper classMapper = new DefaultClassMapper();
- private static Gson gson = new Gson();
- public Gson2JsonMessageConverter() {
- super();
- }
- @Override
- protected Message createMessage(Object object,
- MessageProperties messageProperties) {
- byte[] bytes = null;
- try {
- String jsonString = gson.toJson(object);
- bytes = jsonString.getBytes(getDefaultCharset());
- }
- catch (IOException e) {
- throw new MessageConversionException(
- "Failed to convert Message content", e);
- }
- messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON);
- messageProperties.setContentEncoding(getDefaultCharset());
- if (bytes != null) {
- messageProperties.setContentLength(bytes.length);
- }
- classMapper.fromClass(object.getClass(),messageProperties);
- return new Message(bytes, messageProperties);
- }
- @Override
- public Object fromMessage(Message message)
- throws MessageConversionException {
- Object content = null;
- MessageProperties properties = message.getMessageProperties();
- if (properties != null) {
- String contentType = properties.getContentType();
- if (contentType != null && contentType.contains("json")) {
- String encoding = properties.getContentEncoding();
- if (encoding == null) {
- encoding = getDefaultCharset();
- }
- try {
- Class<?> targetClass = getClassMapper().toClass(
- message.getMessageProperties());
- content = convertBytesToObject(message.getBody(),
- encoding, targetClass);
- }
- catch (IOException e) {
- throw new MessageConversionException(
- "Failed to convert Message content", e);
- }
- }
- else {
- log.warn("Could not convert incoming message with content-type ["
- + contentType + "]");
- }
- }
- if (content == null) {
- content = message.getBody();
- }
- return content;
- }
- private Object convertBytesToObject(byte[] body, String encoding,
- Class<?> clazz) throws UnsupportedEncodingException {
- String contentAsString = new String(body, encoding);
- return gson.fromJson(contentAsString, clazz);
- }
- }
转载于:https://www.cnblogs.com/telwanggs/p/7124809.html
RabbitMQ学习之messageconver插件实现(Gson)相关推荐
- rabbitmq 学习 之shovel 插件使用(22)
转载自 https://yq.aliyun.com/articles/41807 为了方便工作中使用,对 RabbitMQ 的[Shovel]文档进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如 ...
- RabbitMQ学习笔记-RabbitMQ简介
导语 RabbitMQ 是现在比较热门的消息中间件,在互联网行业和传统行业都有大量地使用.消息中间件有很多,RabbitMQ在高可靠.易扩展.高可用等方面都有很大的优势.在学习RabbitMQ的过 ...
- 官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装
一.安装RabbitMQ的依赖Erlang 要进行RabbitMQ学习,首先需要进行RabbitMQ服务的安装,安装我们可以根据官网指导进行http://www.rabbitmq.com/downlo ...
- RabbitMQ学习
RabbitMQ学习 1.概述 用于进程通信的中间件. 优势: 劣势: 1.应用解耦:提高了系统容错性和可维护性 1.系统依赖越多不能保证MQ的高可用 2.异步提速:提升用户体验和系统吞吐量 2.复杂 ...
- RabbitMQ 学习笔记
RabbitMQ 学习笔记 RabbitMQ 学习笔记 1. 中间件 1.1 什么是中间件 1.2 为什么要使用消息中间件 1.3 中间件特点 1.4 在项目中什么时候使用中间件技术 2. 中间件技术 ...
- Rabbitmq学习笔记(尚硅谷2021)
Rabbitmq学习笔记 (尚硅谷) 1.MQ 的概念 1.1 什么是 MQ? 1.2 为什么要用 MQ? 削峰 解耦 异步 1.3 MQ 的分类 ActiveMQ Kafka RocketMQ Ra ...
- 乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍(可供技术选型时使用)
乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍 RabbitMQ介绍 1.RabbitMQ技术简介 2.RabbitMQ其他扩展插件 2.1监控工具rabbitmq-managemen ...
- RabbitMQ学习笔记(高级篇)
RabbitMQ学习笔记(高级篇) 文章目录 RabbitMQ学习笔记(高级篇) RabbitMQ的高级特性 消息的可靠投递 生产者确认 -- confirm确认模式 生产者确认 -- return确 ...
- 消息代理 - RabbitMQ - 学习/实践
1.应用场景 用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗. 2.学习/操作 1. 文档 Messaging that just works - RabbitMQ // 官 ...
最新文章
- ehshig蒙文歌曲_ehshig蒙古音乐盒2017下载
- 程序员面试题精选100题(33)-在O(1)时间删除链表结点[数据结构]
- Java17-day08【File(创建和删除文件、判断和获取功能、遍历目录)、IO流(字节流写数据、异常处理、字节流读数据、复制文本文件、复制图片)】
- B. Light It Up
- 前端学习(682):switch和if else if
- hdu 1995 汉诺塔
- 【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现
- Windows API Unicode 和 多字节转化demo
- 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
- FlashFXP注册码、密钥
- 《剑来》语句摘录(六)
- 虚拟主播合成视频使用教程
- C++流式输入输出加速 给 cin/cout 装个小火箭
- PC端如何使用ADB无线连接Android手机
- 论文阅读_(GIN)How Powerful are Graph Neural Networks
- 35_pytorch 过拟合解决办法 (Early Stop, Dropout)
- matlab 数组显示图片,20.1.4 显示图像数据
- AWVS 网页漏洞扫描工具安装使用(Linux)
- java版扫雷游戏源代码
- A script engine for the specified language can not be created