RabbitMQ学习之messageconver插件实现(Gson)
来源:互联网 发布:kali linux洪水攻击 编辑:程序博客网 时间:2024/06/07 02:01
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();}@Overrideprotected 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);}@Overridepublic 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);}}
0 0
- RabbitMQ学习之messageconver插件实现(Gson)
- RabbitMQ学习之messageconver插件实现(Gson)
- 7.rabbitmq之GSON
- GSON学习笔记之初识GSON
- RabbitMQ之RPC实现
- RabbitMQ学习之安装
- RabbitMQ学习之安装
- RabbitMQ学习之安装
- RabbitMQ学习之概括
- RabbitMQ学习之spring整合发送异步消息(注解实现)
- rabbitMq学习之--装RabbitMq(windows)
- JSON解析之GSON实现
- RabbitMQ学习之集群模式
- RabbitMQ学习之集群部署
- RabbitMQ学习之集群部署
- Rabbitmq学习之路-rabbitmqctl
- RabbitMQ学习之延时队列
- RabbitMQ学习之exchange总结
- insmod modprobe
- Yii 2.0与Yii 1.1 的区别
- 《数据结构》实验一:VC编程环境灵活应用
- Android WebView使用基础
- 黑马程序员-配置path和classpath
- RabbitMQ学习之messageconver插件实现(Gson)
- linux环境将python程序做成可执行
- gevent程序员指南
- 1017. Queueing at Bank (25)
- Hdu 2829 Lawrence(dp+四边形优化或斜率优化)
- 方差分析
- 单链表的基本操作
- linux极常用系统监控命令
- R语言进行方差分析