@Bean
public RabbitTemplate rabbitTemplate() {
//没有指定默认queueName,在接收的监听器指定
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
@Bean("rabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setMessageConverter(customConverter());
return factory;
}
@Bean
public Jackson2JsonMessageConverter customConverter() {
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
ClassMapper classMapper = new ClassMapper() {
@Override
public Class<?> toClass(MessageProperties properties) {
if(properties.getConsumerQueue().equals("tour-guide-api.announce")) {
return AnnounceEventMessage.class;
}
throw new RuntimeException(properties.getConsumerQueue()+"不支持");
}
@Override
public void fromClass(Class<?> clazz, MessageProperties properties) {
throw new UnsupportedOperationException("this mapper is only for inbound, do not use for send message");
}
};
converter.setClassMapper(classMapper);
return converter;
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
return connectionFactory;
}
}