SpringAMQP-消息转换器

测试发送Object类型消息

在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化为字节后发送。

consumer中利用@Bean声明一个队列

    @Bean
    public Queue objectQueue(){
        return  new Queue("object.queue");
    }

只注册队列,方便查看消息内容,因为RabbitMQ遵循阅后即焚,消息不被消费,就不会被消除。

启动consumer服务,查看RabbitMQ Management,Queue队列是不是有object.queue队列

publisher服务中编辑测试

发送消息到object.queue队列

    @Test
    public void testSendMap() throws InterruptedException {
        String queueName = "object.queue";
        Map<String, String> message = new HashMap<>();
        message.put("name", "zhangsan");
        message.put("age", 25);
        rabbitTemplate.convertAndSend(queueName, "china.news", message);
    }

查看RabbitMQ Management,object.queue队列是否有消息

查看消息内容

Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。而默认使用SimpleMessageConverter消息转换器,基于JDK的ObjectOutputStream完成序列化。

设置消息转换器

只需要定义一个MessageConverter 类型的Bean即可。推荐用JSON方式序列化

添加JSON依赖

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

publisher服务

定义MessageConverter

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

consumer服务

定义MessageConverter

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

注意:消息发送方与接收方必须使用相同的MessageConverter消息转换器

定义一个消费者

监听object.queue队列并消费消息

    @RabbitListener(queues = "object.queue")
    public void listenObjectQueueMessage(Map<String,Object> msg) throws InterruptedException {
        System.out.println("ObjectQueue :【" + msg + "】");
    }

 

posted @ 2021-10-29 13:32  一杯水M  阅读(228)  评论(0编辑  收藏  举报