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. 按照前面的测试步骤可以看出,下面的存储的效果,如下所示:

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值