消息转换器
文章目录
RabbitConfig
package com.wyg.rabbitmq.springamqp;
import com.wyg.rabbitmq.springamqp.convert.MyPngMesssageConvert;
import com.wyg.rabbitmq.springamqp.convert.MyPDFMessageConvert;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.amqp.support.ConsumerTagStrategy;
import org.springframework.amqp.support.converter.ContentTypeDelegatingMessageConverter;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.wyg.rabbitmq.springamqp.convert.MyTextMessageConvert;
/**
* RabbitConfig
*
* @author [email protected]
* @date 2019-11-25 15:11
* @since JDK1.8
* @version V1.0
*/
@Configuration
public class RabbitConfig {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setAddresses("localhost:5672");
cachingConnectionFactory.setUsername("guest");
cachingConnectionFactory.setPassword("guest");
cachingConnectionFactory.setVirtualHost("/");
return cachingConnectionFactory;
}
/**
* RabbitAdmin注入容器
*
* @param connectionFactory
* @return
* @throws @author
* [email protected]
* @date 2019/11/25 16:35
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
/*
* autoStartup 必须要设为 true ,否则Spring容器不会加载RabbitAdmin类
*/
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
/**
* RabbitTemplate注入
*
* @param connectionFactory
* @return
* @throws @author
* [email protected]
* @date 2019/11/25 16:37
*/
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
return rabbitTemplate;
}
/**
* SimpleMessageListenerContainer注入
*
* @param connectionFactory
* @return
* @throws @author
* [email protected]
* @date 2019/11/25 17:16
*/
@Bean
public SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
// 监听多个queue
container.addQueueNames("test01");
//container.addQueueNames("test01", "test02", "test03");
// 设置当前消费者数量
container.setConcurrentConsumers(1);
// 设置最大的消费者数量
container.setMaxConcurrentConsumers(5);
// 设置不要重回队列
container.setDefaultRequeueRejected(false);
// 设置自动签收
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
// 设置消费端tag策略
container.setConsumerTagStrategy(new ConsumerTagStrategy() {
@Override
public String createConsumerTag(String queue) {
return queue + "_" + System.currentTimeMillis();
}
});
// 方式二,使用适配器
MessageListenerAdapter adapter = new MessageListenerAdapter(new MyMessageListenerDelegate());
// 自定处理消息方法,不设置默认为handleMessage
adapter.setDefaultListenerMethod("consumeMsg");
// 自定义消息转换器
// adapter.setMessageConverter(new MyTextMessageConvert());
// 1.自定义消息转换器 Json,实际上json对应的是Map类型参数
/* Jackson2JsonMessageConverter jsonMessageConverter = new Jackson2JsonMessageConverter();
adapter.setMessageConverter(jsonMessageConverter);*/
// 2.Java对象
/*Jackson2JsonMessageConverter jsonMessageConverter = new Jackson2JsonMessageConverter();
DefaultJackson2JavaTypeMapper defaultJackson2JavaTypeMapper = new DefaultJackson2JavaTypeMapper();
defaultJackson2JavaTypeMapper.setTrustedPackages("*");
jsonMessageConverter.setJavaTypeMapper(defaultJackson2JavaTypeMapper);
adapter.setMessageConverter(jsonMessageConverter);*/
// 3.Java对象多映射关系
/*Jackson2JsonMessageConverter jsonMessageConverter = new Jackson2JsonMessageConverter();
DefaultJackson2JavaTypeMapper defaultJackson2JavaTypeMapper = new DefaultJackson2JavaTypeMapper();
Map<String, Class<?>> map = new HashMap<>();
map.put("order", Order.class);
map.put("user", User.class);
defaultJackson2JavaTypeMapper.setTrustedPackages("*");
defaultJackson2JavaTypeMapper.setIdClassMapping(map);
jsonMessageConverter.setJavaTypeMapper(defaultJackson2JavaTypeMapper);
adapter.setMessageConverter(jsonMessageConverter);*/
// 4.全局转换器
ContentTypeDelegatingMessageConverter converter = new ContentTypeDelegatingMessageConverter();
MyTextMessageConvert textMessageConvert = new MyTextMessageConvert();
converter.addDelegate("text", textMessageConvert);
converter.addDelegate("appliction/text", textMessageConvert);
converter.addDelegate("text/plain", textMessageConvert);
Jackson2JsonMessageConverter jsonMessageConverter = new Jackson2JsonMessageConverter("*");
converter.addDelegate("json", jsonMessageConverter);
converter.addDelegate("application/json", jsonMessageConverter);
// png
converter.addDelegate("png", new MyPngMesssageConvert());
converter.addDelegate("image/png", new MyPngMesssageConvert());