RabbitMQ 多源配置,并配置开关

RabbitMQ 多源配置,以推和拉不同数据源为例。

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

/**
 * @Author: ZhangHao
 * @Description: RabbitMQ配置
 * @Date: 2022/8/11 11:27 AM
 * @Version: 1.0
 */
@Configuration
public class RabbitMQConfig {

    @Conditional({RabbitMQPullCondition.class})
    @Bean(name = "pullConnectionFactory")
    @Primary
    public ConnectionFactory pullConnectionFactory(@Value("${spring.rabbitmq.pull.host}") String host, @Value("${spring.rabbitmq.pull.port}") Integer port, @Value("${spring.rabbitmq.pull.username}") String username, @Value("${spring.rabbitmq.pull.password}") String password, @Value("${spring.rabbitmq.pull.virtual-host}") String virtualHost) {
        return getConnectionFactory(host, port, username, password, virtualHost);
    }

    @Conditional({RabbitMQPushCondition.class})
    @Bean(name = "pushConnectionFactory")
    public ConnectionFactory pushConnectionFactory(@Value("${spring.rabbitmq.push.host}") String host, @Value("${spring.rabbitmq.push.port}") Integer port, @Value("${spring.rabbitmq.push.username}") String username, @Value("${spring.rabbitmq.push.password}") String password, @Value("${spring.rabbitmq.push.virtual-host}") String virtualHost) {
        return getConnectionFactory(host, port, username, password, virtualHost);
    }

    @Conditional({RabbitMQPullCondition.class})
    @Bean(name = "pullRabbitTemplate")
    @Primary
    public RabbitTemplate pullRabbitTemplate(@Qualifier("pullConnectionFactory") ConnectionFactory connectionFactory) {
        return new RabbitTemplate(connectionFactory);
    }

    @Conditional({RabbitMQPushCondition.class})
    @Bean(name = "pushRabbitTemplate")
    public RabbitTemplate pushRabbitTemplate(@Qualifier("pushConnectionFactory") ConnectionFactory connectionFactory) {
        return new RabbitTemplate(connectionFactory);
    }

    @Conditional({RabbitMQPullCondition.class})
    @Bean(name = "pullContainerFactory")
    public SimpleRabbitListenerContainerFactory pullContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("pullConnectionFactory") ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    @Conditional({RabbitMQPushCondition.class})
    @Bean(name = "pushContainerFactory")
    public SimpleRabbitListenerContainerFactory pushContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("pushConnectionFactory") ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    private ConnectionFactory getConnectionFactory(String host, Integer port, String username, String password, String virtualHost) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        connectionFactory.setVirtualHost(virtualHost);
        return connectionFactory;
    }

}
spring:
  rabbitmq:
    pull:
      host: 
      port: 
      username: 
      password: 
      virtual-host: /
      queue:
        busPosition: 
    push:
      host: 
      port: 
      username: 
      password: 
      virtual-host: /
      exchange: 
      routingKey:
@Conditional({RabbitMQPullCondition.class})
@Component
@Log4j2
public class BusPositionListener {

    @Autowired
    private IBusPositionService Service;

    /**
     * 验证是否能消费到消息,每次重启后验证,只验证一次,防止日志量过大,默认未验证
     */
    private Boolean isNotVerify = true;

    @RabbitListener(queues = "${spring.rabbitmq.pull.queue.busPosition}", containerFactory = "pullContainerFactory")
    public void deal(Message message) {
        if(isNotVerify) {
            log.info("可以消费到消息,message:{}", message);
            isNotVerify = false;
        }
    }

}
    @Resource(name = "pushRabbitTemplate")
    private RabbitTemplate pushDataLakeRabbitTemplate;

private void sendMessage(PushMessage pushMessage) {
        log.info("dataLake sendMQ, pushMessage:{}", pushMessage);
        pushDataLakeRabbitTemplate.convertAndSend(exchange, routingKey, JSON.toJSONString(pushMessage));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值