RabbitMqConfig.java 9.36 KB
package com.topdraw.config;

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.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

@Configuration
public class RabbitMqConfig {

    @Value("${mutil-mq.service.host}")
    private String serviceHost;
    @Value("${mutil-mq.service.port}")
    private Integer servicePort;
    @Value("${mutil-mq.service.username}")
    private String serviceUserName;
    @Value("${mutil-mq.service.password}")
    private String servicePassword;
    @Value("${mutil-mq.service.virtual-host}")
    private String serviceVirtualHost;

    @Bean(name = "serviceConnectionFactory")
    @Primary
    public ConnectionFactory serviceConnectionFactory(){
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(serviceHost);
        connectionFactory.setPort(servicePort);
        connectionFactory.setUsername(serviceUserName);
        connectionFactory.setPassword(servicePassword);
        connectionFactory.setVirtualHost(serviceVirtualHost);
        return connectionFactory;
    }

    @Bean(name = "serviceRabbitListenerContainerFactory")
    @Primary
    public RabbitListenerContainerFactory userCenterRabbitListenerContainerFactory(
            SimpleRabbitListenerContainerFactoryConfigurer containerFactoryConfigurer,
            @Qualifier("serviceConnectionFactory") ConnectionFactory connectionFactory) {
        System.out.println("userCenterRabbitListenerContainerFactory ====>> start ");
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        containerFactoryConfigurer.configure(factory,connectionFactory);
        return factory;
    }

    @Bean(name = "serviceRabbitTemplate")
    public RabbitTemplate userCenterRabbitTemplate(ConnectionFactory ucServiceConnectionFactory){
        RabbitTemplate u = new RabbitTemplate(ucServiceConnectionFactory);
        return u;
    }


    @Value("${mutil-mq.management.host}")
    private String managementHost;
    @Value("${mutil-mq.management.port}")
    private Integer managementPort;
    @Value("${mutil-mq.management.username}")
    private String managementUserName;
    @Value("${mutil-mq.management.password}")
    private String managementPassword;
    @Value("${mutil-mq.management.virtual-host}")
    private String managementVirtualHost;

    @Bean(name = "managementConnectionFactory")
    public ConnectionFactory managementConnectionFactory(){
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(managementHost);
        connectionFactory.setPort(managementPort);
        connectionFactory.setUsername(managementUserName);
        connectionFactory.setPassword(managementPassword);
        connectionFactory.setVirtualHost(managementVirtualHost);
        return connectionFactory;
    }

    @Bean(name = "managementRabbitListenerContainerFactory")
    public RabbitListenerContainerFactory memberServiceRabbitListenerContainerFactory(
            SimpleRabbitListenerContainerFactoryConfigurer containerFactoryConfigurer,
            @Qualifier("managementConnectionFactory") ConnectionFactory connectionFactory) {
        System.out.println("memberServiceRabbitListenerContainerFactory ====>> start ");
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        containerFactoryConfigurer.configure(factory,connectionFactory);
        return factory;
    }

    @Bean(name = "managementRabbitTemplate")
    public RabbitTemplate memberServiceRabbitTemplate(ConnectionFactory ucGatewayConnectionFactory){
        RabbitTemplate u = new RabbitTemplate(ucGatewayConnectionFactory);
        return u;
    }

    /**************************************************uc-getaway-samll 2 uc-consumer-samll*************************************************************/

    /*public static final String GATEWAY_TO_SMALL_DIRECT = "uc.gateway.small.direct";

    @Bean
    public Queue eventSmallDirect() {
        return new Queue(GATEWAY_TO_SMALL_DIRECT);
    }

    @Bean
    Binding eventSmallBinding(DirectExchange managementExchange , Queue eventSmallDirect) {
        BindingBuilder.DirectExchangeRoutingKeyConfigurer directExchangeRoutingKeyConfigurer =
                BindingBuilder.bind(eventSmallDirect).to(managementExchange);
        return directExchangeRoutingKeyConfigurer.with(GATEWAY_TO_SMALL_DIRECT);
    }*/


    /**************************************************uc-engine-management 2 uc-consumer-iptv*************************************************************/


    /**************************************************uc-getaway-iptv 2 uc-consumer-iptv*************************************************************/

    public static final String GATEWAY_TO_SERVICE_DIRECT = "uc.gateway.service.direct";

    @Bean
    public Queue eventServiceDirect() {
        return new Queue(GATEWAY_TO_SERVICE_DIRECT);
    }

    @Bean
    Binding eventBinding(DirectExchange managementExchange, Queue eventServiceDirect) {
        BindingBuilder.DirectExchangeRoutingKeyConfigurer directExchangeRoutingKeyConfigurer =
                BindingBuilder.bind(eventServiceDirect).to(managementExchange);
        return directExchangeRoutingKeyConfigurer.with(ENGINE_TO_SERVICE_DIRECT);
    }


    /**************************************************uc-engine-management 2 uc-consumer-iptv*************************************************************/

    public static final String UC_DIRECT_MANAGEMENT = "uc.direct.management";
    // uc-service-management 2 uc-consumer-iptv
    public static final String ENGINE_TO_SERVICE_DIRECT = "uc.engine.service.direct";

    @Bean
    public Queue managementDirect() {
        return new Queue(ENGINE_TO_SERVICE_DIRECT);
    }

    @Bean
    DirectExchange managementExchange(){
        return ExchangeBuilder.directExchange(UC_DIRECT_MANAGEMENT).build();
    }

    @Bean
    Binding managementBinding(DirectExchange managementExchange , Queue managementDirect) {
        BindingBuilder.DirectExchangeRoutingKeyConfigurer directExchangeRoutingKeyConfigurer =
                BindingBuilder.bind(managementDirect).to(managementExchange);
        return directExchangeRoutingKeyConfigurer.with(ENGINE_TO_SERVICE_DIRECT);
    }


    /**************************************************uc-engine-iptv 2 uc-consumer-management*************************************************************/

    public static final String UC_DIRECT_SERVICE = "uc.direct";
    // uc-service-iptv 2 uc-consumer-management
    public static final String ENGINE_TO_MANAGEMENT_DIRECT = "uc.engine.management.direct";

    @Bean
    public Queue serviceDirect() {
        return new Queue(ENGINE_TO_MANAGEMENT_DIRECT);
    }

    @Bean
    DirectExchange serviceExchange(){
        return ExchangeBuilder.directExchange(UC_DIRECT_SERVICE).build();
    }

    @Bean
    Binding serviceBinding(DirectExchange serviceExchange , Queue serviceDirect) {
        BindingBuilder.DirectExchangeRoutingKeyConfigurer directExchangeRoutingKeyConfigurer =
                BindingBuilder.bind(serviceDirect).to(serviceExchange);
        return directExchangeRoutingKeyConfigurer.with(ENGINE_TO_MANAGEMENT_DIRECT);
    }



    /**************************************************数据基座*************************************************************/
    public static final String UC_EVENTBUS = "uc.eventbus";
    public static final String UC_EVENTBUS_KEY = "uc.eventbus.*.topic";
    public static final String UC_EVENTBUS_TOPIC = "uc.eventbus";

    @Bean
    public Queue eventBusQueue() {
        return new Queue(UC_EVENTBUS_TOPIC);
    }

    @Bean
    TopicExchange eventBusExchange() {
        return ExchangeBuilder.topicExchange(UC_EVENTBUS)
                .durable(true).build();
    }

    @Bean
    Binding eventBusBinding(TopicExchange eventBusExchange, Queue eventBusQueue) {
        return BindingBuilder
                .bind(eventBusQueue)
                .to(eventBusExchange)
                .with(UC_EVENTBUS_KEY);
    }


/**************************************************跨屏数据*************************************************************/
    /** 删除全部收藏队列(大屏->小屏) */
    public static final String COLLECTION_DELETE_ALL_QUEUE = "queue.collection.deleteall";

    /**  添加收藏队列(大屏->小屏) */
    public static final String COLLECTION_ADD_QUEUE = "queue.collection.add";

    /** 删除收藏队列(大屏->小屏) */
    public static final String COLLECTION_DELETE_QUEUE = "queue.collection.delete";

    /** 微信侧 公众号关注与取消关注 */
    public static final String WEIXIN_SUBORUNSUB_QUEUE = "weixin.subOrUnSub.queue";
}