zoukankan      html  css  js  c++  java
  • RabbitMQ学习之messageconver插件实现(Gson)

    RabbitMQ已经实现了Jackson的消息转换(Jackson2JsonMessageConverter),由于考虑到效率,如下使用Gson实现消息转换。

    如下消息的转换类的接口MessageConverter,Jackson2JsonMessageConverter的父类AbstractJsonMessageConverter针对json转换的基类。

    我们实现Gson2JsonMessageConverter转换类也继承AbstractJsonMessageConverter。

    引入Gson的pom

    [html] view plain copy
     
     print?
    1. <dependency>  
    2.             <groupId>com.google.code.gson</groupId>  
    3.             <artifactId>gson</artifactId>  
    4.             <version>2.3</version>  
    5.         </dependency>  

    转换类实现如下:

    [java] view plain copy
     
     print?
    1. package cn.slimsmart.rabbitmq.demo.spring.tag;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.UnsupportedEncodingException;  
    5.   
    6. import org.apache.commons.logging.Log;  
    7. import org.apache.commons.logging.LogFactory;  
    8. import org.springframework.amqp.core.Message;  
    9. import org.springframework.amqp.core.MessageProperties;  
    10. import org.springframework.amqp.support.converter.AbstractJsonMessageConverter;  
    11. import org.springframework.amqp.support.converter.ClassMapper;  
    12. import org.springframework.amqp.support.converter.DefaultClassMapper;  
    13. import org.springframework.amqp.support.converter.MessageConversionException;  
    14.   
    15. import com.google.gson.Gson;  
    16.   
    17. public class Gson2JsonMessageConverter extends AbstractJsonMessageConverter {  
    18.       
    19.     private static Log log = LogFactory.getLog(Gson2JsonMessageConverter.class);  
    20.       
    21.     private static  ClassMapper classMapper =  new DefaultClassMapper();  
    22.   
    23.     private static Gson gson = new Gson();  
    24.   
    25.     public Gson2JsonMessageConverter() {  
    26.         super();  
    27.     }  
    28.   
    29.     @Override  
    30.     protected Message createMessage(Object object,  
    31.             MessageProperties messageProperties) {  
    32.         byte[] bytes = null;  
    33.         try {  
    34.             String jsonString = gson.toJson(object);  
    35.             bytes = jsonString.getBytes(getDefaultCharset());  
    36.         }  
    37.         catch (IOException e) {  
    38.             throw new MessageConversionException(  
    39.                     "Failed to convert Message content", e);  
    40.         }  
    41.         messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON);  
    42.         messageProperties.setContentEncoding(getDefaultCharset());  
    43.         if (bytes != null) {  
    44.             messageProperties.setContentLength(bytes.length);  
    45.         }  
    46.         classMapper.fromClass(object.getClass(),messageProperties);  
    47.         return new Message(bytes, messageProperties);  
    48.     }  
    49.   
    50.     @Override  
    51.     public Object fromMessage(Message message)  
    52.             throws MessageConversionException {  
    53.         Object content = null;  
    54.         MessageProperties properties = message.getMessageProperties();  
    55.         if (properties != null) {  
    56.             String contentType = properties.getContentType();  
    57.             if (contentType != null && contentType.contains("json")) {  
    58.                 String encoding = properties.getContentEncoding();  
    59.                 if (encoding == null) {  
    60.                     encoding = getDefaultCharset();  
    61.                 }  
    62.                 try {  
    63.                         Class<?> targetClass = getClassMapper().toClass(  
    64.                                 message.getMessageProperties());  
    65.                         content = convertBytesToObject(message.getBody(),  
    66.                                 encoding, targetClass);  
    67.                 }  
    68.                 catch (IOException e) {  
    69.                     throw new MessageConversionException(  
    70.                             "Failed to convert Message content", e);  
    71.                 }  
    72.             }  
    73.             else {  
    74.                 log.warn("Could not convert incoming message with content-type ["  
    75.                         + contentType + "]");  
    76.             }  
    77.         }  
    78.         if (content == null) {  
    79.             content = message.getBody();  
    80.         }  
    81.         return content;  
    82.     }  
    83.   
    84.     private Object convertBytesToObject(byte[] body, String encoding,  
    85.             Class<?> clazz) throws UnsupportedEncodingException {  
    86.         String contentAsString = new String(body, encoding);  
    87.         return gson.fromJson(contentAsString, clazz);  
    88.     }  
    89. }  
  • 相关阅读:
    PHP filter_var() 函数
    jquery 表格(点击列标题,保留当前列,其他列隐藏)
    jquery 表格(表格记录分页显示)
    jquery 表格(点击行或列,隐藏当前选中的行或列)
    jquery 表格(鼠标悬停改变改变行背景+隔行换色)
    jquery 表格(鼠标悬停列标题,改变该列的背景色)
    你不了解的PHP 的10件事情(转)
    优化PHP代码的40条建议(转)
    jquery 表格(展开和折叠列表项)
    IDENT_CURRENT
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7124809.html
Copyright © 2011-2022 走看看