2-3 MessageListenerAdapter
2020-07-15 本文已影响0人
Finlay_Li
MessageListenerAdapter简介
消息监听适配器。
通常用于需要自定义MessageConverter 的场景
MessageConverter
-
自定义转换器:MessageConverter,需要重写下面两个方法:
toMessage():java对象转换为Message。
fromMessage():Message对象转换为java对象。 -
常用于自定义:图片类型、PDF、PPT、流媒体。
-
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