2-3 MessageListenerAdapter

2020-07-15  本文已影响0人  Finlay_Li

MessageListenerAdapter简介

消息监听适配器。
通常用于需要自定义MessageConverter 的场景

MessageConverter

  1. 自定义转换器:MessageConverter,需要重写下面两个方法:
    toMessage():java对象转换为Message。
    fromMessage():Message对象转换为java对象。

  2. 常用于自定义:图片类型、PDF、PPT、流媒体。

  3. ContentTypeDelegatingMessageConverter 全局消息转换器

示例

package com.finlay.scaffold.config;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.support.converter.MessageConversionException;
import org.springframework.amqp.support.converter.MessageConverter;

public class ImageMessageDelegate implements MessageConverter {
    @Override
    public Message toMessage(Object o, MessageProperties messageProperties) throws MessageConversionException {
        return null;
    }

    @Override
    public Object fromMessage(Message message) throws MessageConversionException {
        return null;
    }
}
@Bean
    public SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
        //1. 设置监听的队列
        container.setQueueNames("topic.que", "fanout.que");
        // 2. 设置消费者数量,默认就是1
        container.setConcurrentConsumers(1);
        container.setMaxConcurrentConsumers(5);
        // 4. 设置消息是否重回队列
        container.setDefaultRequeueRejected(false);

        // 5. 设置消息的签收模式
        container.setAcknowledgeMode(AcknowledgeMode.AUTO);

        // 6.1 声明Listener消费消息
        /*container.setMessageListener((ChannelAwareMessageListener) (message, channel) -> {
            String msg = new String(message.getBody());
            System.out.println("*******消费者*******:" + msg);
        });*/

        //6.2 声明监听适配器
        MessageListenerAdapter adapter = new MessageListenerAdapter();
        adapter.setDelegate(new ImageMessageDelegate());//ImageMessageDelegate自定义的消息转换器实现
        container.setMessageListener(adapter);
        return container;
    }

amqpTemplate.send() 不使用默认的SimpleMessageConverter

上一篇下一篇

猜你喜欢

热点阅读