package com.demo.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.annotation.Resource;
@Configuration
public class TestMQConfig {
@Resource
private ObjectMapper objectMapper;
@Value("${spring.rabbitmq.host:10.1.1.1}")
private String host;
@Value("${spring.rabbitmq.port:5672}")
private int port;
@Value("${spring.rabbitmq.username:test}")
private String username;
@Value("${spring.rabbitmq.virtual-host:test}")
private String virtualHost;
@Value("${spring.rabbitmq.password:test}")
private String password;
@Bean(name = "decorationConnectionFactory")
@Primary
public ConnectionFactory pmsConnectionFactory() {
return connectionFactory(host, port, username, password, virtualHost);
}
public CachingConnectionFactory connectionFactory(String host, int port, String username, String password, String virtual_host) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtual_host);
return connectionFactory;
}
@Bean(name = "decorationRabbitListenerContainerFactory")
@Primary
public RabbitListenerContainerFactory pmsRabbitListenerContainerFactory(@Qualifier("decorationConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(messageConverter());
return factory;
}
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter(objectMapper);
}
@Bean(name = "BPMRabbitMQTemplate")
@Primary
public RabbitTemplate rabbitTemplate(
@Qualifier("decorationConnectionFactory") ConnectionFactory connectionFactory
) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter());
return rabbitTemplate;
}
/**
* 定义队列
*
* @return
*/
@Bean
public Queue BPMQueue() {
return new Queue("bpmstart.entry.group.0");
}
/**
* 定义交换机
*
* @return
*/
@Bean
TopicExchange BPMExchange() {
return new TopicExchange("bpmstart.entry");
}
/**
* 交换机绑定队列
*
* @return
*/
@Bean
Binding bindingExchangeHandleEnergyMeter() {
return BindingBuilder.bind(BPMQueue()).to(BPMExchange()).with("BPM");
}
}