RabbitMqBindingConfig.java 3.92 KB
package com.topdraw.config;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.naming.ConfigurationException;
import java.util.List;
import java.util.Map;

@Component
public class RabbitMqBindingConfig {

    /**************************************************数据源选择*************************************************************/

    @Autowired
    private RabbitMqSourceConfig rabbitMqSourceConfig;
    @Autowired
    private RabbitMqCustomConfig rabbitMqCustomConfig;

    @Resource(name = "managementRabbitAdmin")
    private RabbitAdmin managementRabbitAdmin;

    @Resource(name = "serviceRabbitAdmin")
    private RabbitAdmin serviceRabbitAdmin;


    @PostConstruct
    public void initBinding() throws ConfigurationException {

//       String source = rabbitMqSourceConfig.getActiveSource();

       List<Map<String, String>> list = rabbitMqCustomConfig.getList();
       if (CollectionUtils.isNotEmpty(list)) {

           for (Map<String, String> map : list) {

               String exchange = map.get("exchange");
               String exchangeType = map.get("exchange-type");
               Exchange exchange_ = null;
               switch (exchangeType) {
                   case ExchangeTypes.TOPIC:
                       exchange_ = ExchangeBuilder.topicExchange(exchange)
                               .durable(true).build();
                       break;
                   case ExchangeTypes.FANOUT:
                       exchange_ = ExchangeBuilder.fanoutExchange(exchange)
                               .durable(true).build();
                       break;
                   case ExchangeTypes.HEADERS:
                       exchange_ = ExchangeBuilder.headersExchange(exchange)
                               .durable(true).build();
                       break;

                   default:
                       exchange_ = ExchangeBuilder.directExchange(exchange)
                               .durable(true).build();
                       break;
               }

               String queue = map.get("queue");
               Queue queue_ = new Queue(queue);

               String routingKey = map.get("routing-key");
               if (StringUtils.isBlank(routingKey)) {
                   routingKey = queue;
               }

               Binding binding_ = BindingBuilder.bind(queue_).to(exchange_).with(routingKey).and(null);


               String active = map.get("active");
               switch (active) {
                   case "management":
                       this.managementRabbitAdmin.declareExchange(exchange_);
                       this.managementRabbitAdmin.declareQueue(queue_);
                       this.managementRabbitAdmin.declareBinding(binding_);
                   break;
                   case "service":
                       this.serviceRabbitAdmin.declareExchange(exchange_);
                       this.serviceRabbitAdmin.declareQueue(queue_);
                       this.serviceRabbitAdmin.declareBinding(binding_);
                   break;
                  /* case "service,management":
                       this.serviceRabbitAdmin.declareExchange(exchange_);
                       this.serviceRabbitAdmin.declareQueue(queue_);
                       this.serviceRabbitAdmin.declareBinding(binding_);

                       this.managementRabbitAdmin.declareExchange(exchange_);
                       this.managementRabbitAdmin.declareQueue(queue_);
                       this.managementRabbitAdmin.declareBinding(binding_);
                       break;*/
                   default:

                       break;
               }

           }

        }

    }

}