SpringBoot之RabbitMQ的序列化转Json的解决方式 - Go语言中文社区

SpringBoot之RabbitMQ的序列化转Json的解决方式


背景:

       SpringBoot自带一些机制可以实现RabbitMQ的开发使用,不过我们发现一个问题那就是,自带的RabbitTemplate机制就是可以实现一些对象的序列化传输,不过不是明文,所以看起来很不得方便,为了解决只个问题,我们可以进行自定义MQ的配置,可以有效实现序列化转为Json明文进行存储。

步骤:

1. 首先我们需要进行SpringBoot的相关RabbitMQ的开发配置:

a.   在application.properties配置文件中进行配置RabbitMQ的相关配置:

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#默认的端口号就是5672,可以不写。
spring.rabbitmq.port= 5672

b.  在Test测试文件中进行测试相关的接收发送操作

       首先是点对点的单发模式:

    @Autowired
    //该模板是对RabbitMQ的开发操作基本的接口
    RabbitTemplate rabbitTemplate;

    @Test
    void test01_send() {
/**
 * @Description: convertAndSend 函数可以实现自动实现对象序列化
 * @Param: []
 * @return: void
 * @Author: 葛春光
 * @Date: 2020/7/23
 */
        /**
         * 点对点发送(direct)
         */
        //将object自动转化为序列化字符串。
        Map<String, Object> map = new HashMap<>();
        map.put("msg", "Hello World!");
        map.put("data", Arrays.asList("Hello", 123, true));

        //  Book book = new Book("三国演义","罗贯中");
        rabbitTemplate.convertAndSend("exchange.direct", "gcg.news", map);
    }

    @Test
    public void test02_receive() {
        Object o = rabbitTemplate.receiveAndConvert("gcg.news");
        if (o != null) {
            System.out.println(o.getClass());
            System.out.println("接收的对象:" + o.toString());
        } else {
            System.out.println("接收的对象:" + o.toString());
        }
    }

      然后是fanout的广播发送(效果是在该路由器下绑定的所有的队列都会自动获取到数据):

    /**
     * 广播发送(fanout)
     * fanout不区分路由key,所以可以随意的进行匹配,他会自动发送给所有的绑定非队列。
     */
    @Test
    public void Test02_send() {
        rabbitTemplate.convertAndSend("exchange.fanout", "", new Book("三国", "罗贯中"));

    }

       最后就是存放在MQ中数据的情况(明显可以看出存放的数据为序列化后的数据,看起来很不方面):

c.  解决方式,在MyRabbitMQConfig中进行自定义(将自定义的配置放入Bean容器后会自动的进行启动,而不使用默认的方式进行启动):

@Configuration  //配置类
/** 
* @Description: 自己配置的MQ的配置类,可以实现对象直接转为Json 而不是乱码序列化
* @Param:  
* @return:  
* @Author: 葛春光
* @Date: 2020/7/23 
*/ 
public class MyRabbitMQConfig {
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

注意:

       关于MQ中存放的数据是乱码的问题,在SpringBoot1.x版本可以直接用上面的方式实现,不过在2.x版本不建议使用,因为可以存放在MQ中Json字符串,不过在消费者消费过程中会出现映射报错问题。

d. 按照前面的测试步骤可以看出,下面的存储的效果,如下所示:

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/gcglhd/article/details/107556609
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-04-11 09:12:55
  • 阅读 ( 529 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢