|  | @@ -0,0 +1,285 @@
 | 
	
		
			
				|  |  | +package com.usky.dxtop.service.config;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import lombok.Data;
 | 
	
		
			
				|  |  | +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.RabbitAdmin;
 | 
	
		
			
				|  |  | +import org.springframework.amqp.rabbit.core.RabbitTemplate;
 | 
	
		
			
				|  |  | +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Qualifier;
 | 
	
		
			
				|  |  | +import org.springframework.boot.autoconfigure.amqp.RabbitProperties;
 | 
	
		
			
				|  |  | +import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
 | 
	
		
			
				|  |  | +import org.springframework.context.annotation.Bean;
 | 
	
		
			
				|  |  | +import org.springframework.context.annotation.Configuration;
 | 
	
		
			
				|  |  | +import org.springframework.context.annotation.Primary;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * @author yq
 | 
	
		
			
				|  |  | + * @date 2021/9/9 13:37
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +@Data
 | 
	
		
			
				|  |  | +@Configuration
 | 
	
		
			
				|  |  | +public class RabbitmqConfig {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static final String PERSON = "profile_trans_produce";
 | 
	
		
			
				|  |  | +    public static final String CARD = "card_trans_produce";
 | 
	
		
			
				|  |  | +    public static final String CHARGE = "charge_trans_produce";
 | 
	
		
			
				|  |  | +    public static final String DISH = "dish_trade_produce";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RabbitProperties rabbitProperties;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 连接工厂
 | 
	
		
			
				|  |  | +     * @param vHost
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public ConnectionFactory connectionFactory(String vHost) {
 | 
	
		
			
				|  |  | +        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
 | 
	
		
			
				|  |  | +        connectionFactory.setHost(rabbitProperties.getHost());
 | 
	
		
			
				|  |  | +        connectionFactory.setPort(rabbitProperties.getPort());
 | 
	
		
			
				|  |  | +        connectionFactory.setUsername(rabbitProperties.getUsername());
 | 
	
		
			
				|  |  | +        connectionFactory.setPassword(rabbitProperties.getPassword());
 | 
	
		
			
				|  |  | +        connectionFactory.setVirtualHost(vHost);
 | 
	
		
			
				|  |  | +        return connectionFactory;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 发送消息模版
 | 
	
		
			
				|  |  | +     * @param connectionFactory
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
 | 
	
		
			
				|  |  | +        rabbitTemplate.setMessageConverter(this.messageConverter());
 | 
	
		
			
				|  |  | +        return rabbitTemplate;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 监听工厂
 | 
	
		
			
				|  |  | +     * @param configurer
 | 
	
		
			
				|  |  | +     * @param connectionFactory
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public SimpleRabbitListenerContainerFactory listenerFactory(
 | 
	
		
			
				|  |  | +            SimpleRabbitListenerContainerFactoryConfigurer configurer,
 | 
	
		
			
				|  |  | +            ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        SimpleRabbitListenerContainerFactory listenerContainerFactory = new SimpleRabbitListenerContainerFactory();
 | 
	
		
			
				|  |  | +        //设置手动ack
 | 
	
		
			
				|  |  | +        listenerContainerFactory.setAcknowledgeMode(AcknowledgeMode.AUTO);
 | 
	
		
			
				|  |  | +        configurer.configure(listenerContainerFactory, connectionFactory);
 | 
	
		
			
				|  |  | +        return listenerContainerFactory;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 序列化
 | 
	
		
			
				|  |  | +      * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public Jackson2JsonMessageConverter messageConverter() {
 | 
	
		
			
				|  |  | +        return new Jackson2JsonMessageConverter();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 交换机
 | 
	
		
			
				|  |  | +     * @param name
 | 
	
		
			
				|  |  | +     * @param amqpAdmin
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public DirectExchange exchange(String name, AmqpAdmin amqpAdmin){
 | 
	
		
			
				|  |  | +        DirectExchange exchange = new DirectExchange(name, true, false);
 | 
	
		
			
				|  |  | +        exchange.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return exchange;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 队列
 | 
	
		
			
				|  |  | +     * @param name
 | 
	
		
			
				|  |  | +     * @param amqpAdmin
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public Queue queue(String name, AmqpAdmin amqpAdmin){
 | 
	
		
			
				|  |  | +        Queue queue = new Queue(name, true);
 | 
	
		
			
				|  |  | +        queue.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return queue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 连接配置
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean(name = "personConnectionFactory")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    public ConnectionFactory personConnectionFactory(){
 | 
	
		
			
				|  |  | +        return this.connectionFactory(PERSON);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "cartConnectionFactory")
 | 
	
		
			
				|  |  | +    public ConnectionFactory cartConnectionFactory(){
 | 
	
		
			
				|  |  | +        return this.connectionFactory(CARD);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "chargeConnectionFactory")
 | 
	
		
			
				|  |  | +    public ConnectionFactory chargeConnectionFactory(){
 | 
	
		
			
				|  |  | +        return this.connectionFactory(CHARGE);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "dishConnectionFactory")
 | 
	
		
			
				|  |  | +    public ConnectionFactory dishConnectionFactory(){
 | 
	
		
			
				|  |  | +        return this.connectionFactory(DISH);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 发送模版配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean(name = "personRabbitTemplate")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    public RabbitTemplate personRabbitTemplate(@Qualifier("personConnectionFactory") ConnectionFactory connectionFactory ) {
 | 
	
		
			
				|  |  | +        return this.rabbitTemplate(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "cartRabbitTemplate")
 | 
	
		
			
				|  |  | +    public RabbitTemplate cartRabbitTemplate(@Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory ) {
 | 
	
		
			
				|  |  | +        return this.rabbitTemplate(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "chargeRabbitTemplate")
 | 
	
		
			
				|  |  | +    public RabbitTemplate chargeRabbitTemplate(@Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory ) {
 | 
	
		
			
				|  |  | +        return this.rabbitTemplate(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "dishRabbitTemplate")
 | 
	
		
			
				|  |  | +    public RabbitTemplate dishRabbitTemplate(@Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory ) {
 | 
	
		
			
				|  |  | +        return this.rabbitTemplate(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 监听工厂配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean(name = "personListenerFactory")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    public SimpleRabbitListenerContainerFactory personListenerFactory(
 | 
	
		
			
				|  |  | +            SimpleRabbitListenerContainerFactoryConfigurer configurer,
 | 
	
		
			
				|  |  | +            @Qualifier("personConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return this.listenerFactory(configurer,connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "cartListenerFactory")
 | 
	
		
			
				|  |  | +    public SimpleRabbitListenerContainerFactory cartListenerFactory(
 | 
	
		
			
				|  |  | +            SimpleRabbitListenerContainerFactoryConfigurer configurer,
 | 
	
		
			
				|  |  | +            @Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return this.listenerFactory(configurer,connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "chargeListenerFactory")
 | 
	
		
			
				|  |  | +    public SimpleRabbitListenerContainerFactory chargeListenerFactory(
 | 
	
		
			
				|  |  | +            SimpleRabbitListenerContainerFactoryConfigurer configurer,
 | 
	
		
			
				|  |  | +            @Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return this.listenerFactory(configurer,connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean(name = "dishListenerFactory")
 | 
	
		
			
				|  |  | +    public SimpleRabbitListenerContainerFactory dishListenerFactory(
 | 
	
		
			
				|  |  | +            SimpleRabbitListenerContainerFactoryConfigurer configurer,
 | 
	
		
			
				|  |  | +            @Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return this.listenerFactory(configurer,connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * admin配置
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean("personAdmin")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    AmqpAdmin personAmqpAdmin(@Qualifier("personConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return new RabbitAdmin(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("cartAdmin")
 | 
	
		
			
				|  |  | +    AmqpAdmin cartAmqpAdmin(@Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return new RabbitAdmin(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("chargeAdmin")
 | 
	
		
			
				|  |  | +    AmqpAdmin chargeAmqpAdmin(@Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return new RabbitAdmin(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("dishAdmin")
 | 
	
		
			
				|  |  | +    AmqpAdmin dishAmqpAdmin(@Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory) {
 | 
	
		
			
				|  |  | +        return new RabbitAdmin(connectionFactory);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 交换机
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean("personExchange")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    public DirectExchange personExchange(@Qualifier("personAdmin") AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.exchange(PERSON,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean("cartExchange")
 | 
	
		
			
				|  |  | +    public DirectExchange cartExchange(@Qualifier("cartAdmin") AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.exchange(CARD,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("chargeExchange")
 | 
	
		
			
				|  |  | +    public DirectExchange chargeExchange(@Qualifier("chargeAdmin") AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.exchange(CHARGE,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("dishExchange")
 | 
	
		
			
				|  |  | +    public DirectExchange dishExchange(@Qualifier("dishAdmin") AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.exchange(DISH,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 队列
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean("personQueue")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    Queue personQueue(@Qualifier("personAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.queue(PERSON,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean("cartQueue")
 | 
	
		
			
				|  |  | +    Queue cartQueue(@Qualifier("cartAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.queue(CARD,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("chargeQueue")
 | 
	
		
			
				|  |  | +    Queue chargeQueue(@Qualifier("chargeAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.queue(CHARGE,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("dishQueue")
 | 
	
		
			
				|  |  | +    Queue dishQueue(@Qualifier("dishAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        return this.queue(DISH,amqpAdmin);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 绑定
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Bean("personBin")
 | 
	
		
			
				|  |  | +    @Primary
 | 
	
		
			
				|  |  | +    Binding personBindingPersonDirect(@Qualifier("personAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        Binding binding = BindingBuilder.bind(personQueue(amqpAdmin)).to(personExchange(amqpAdmin)).with(PERSON);
 | 
	
		
			
				|  |  | +        binding.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return binding;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Bean("cartBin")
 | 
	
		
			
				|  |  | +    Binding cartBindingPersonDirect(@Qualifier("cartAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        Binding binding = BindingBuilder.bind(cartQueue(amqpAdmin)).to(cartExchange(amqpAdmin)).with(CARD);
 | 
	
		
			
				|  |  | +        binding.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return binding;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("chargeBin")
 | 
	
		
			
				|  |  | +    Binding chargeBindingPersonDirect(@Qualifier("chargeAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        Binding binding = BindingBuilder.bind(chargeQueue(amqpAdmin)).to(chargeExchange(amqpAdmin)).with(CHARGE);
 | 
	
		
			
				|  |  | +        binding.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return binding;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    @Bean("dishBin")
 | 
	
		
			
				|  |  | +    Binding dishBindingPersonDirect(@Qualifier("dishAdmin")AmqpAdmin amqpAdmin) {
 | 
	
		
			
				|  |  | +        Binding binding = BindingBuilder.bind(dishQueue(amqpAdmin)).to(dishExchange(amqpAdmin)).with(DISH);
 | 
	
		
			
				|  |  | +        binding.setAdminsThatShouldDeclare(amqpAdmin);
 | 
	
		
			
				|  |  | +        return binding;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |