Rabbitmq在项目启动时读取配置文件实现自动创建交换机和队列

亲测有效,直接上代码
yml文件配置:

#自定义队列名称和键
custom:
  queue-name: cs_queue
  routing-key: cs
//配置类,项目启动自动加载
@Configuration
public class TopicMqConfig implements BeanPostProcessor {
    @Resource
    private RabbitAdmin rabbitAdmin;
    
    //配置文件读取标识
    @Value("${custom.queue-name}")
    private String queueName;
    
    @Value("${custom.routing-key}")
    private String routingKey;

    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        //只有设置为true,spring才会加载RabbitAdmin 这个类
        rabbitAdmin.setAutoStartup(true);
        return rabbitAdmin;
    }

    //初始化自动创建交换机队列以及绑定
    @PostConstruct
    public void init() {
    	Queue queue = new Queue(queueName);
        rabbitAdmin.declareQueue(queue);
        //交换机可以像队列一样,读取配置文件获取,这里测试
        TopicExchange exchange = new TopicExchange("unique_exchange");
        rabbitAdmin.declareExchange(exchange);
        rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(routingKey));
    }
}

生产者就不写了,百度一下

消费者可以从配置文件读取变成动态监听队列

@Slf4j
@Component
public class Consumer1 {
	@RabbitHandler
    @RabbitListener(queues = "${custom.queue-name}")
    public void receive(String content) {
        log.info("队列收到消息{}", content);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,我们需要编写一个 Docker Compose 文件来部署 Canal 和 MySQL 8.0.30。 1. 部署 Canal 和 MySQL 8.0.30 下面是一个简单的 Docker Compose 文件,用于启动 Canal 和 MySQL 8.0.30: ``` version: '3' services: mysql: image: mysql:8.0.30 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test canal: image: canal/canal-server:v1.1.4 ports: - "11111:11111" - "11112:11112" depends_on: - mysql environment: - canal.instance.master.address=mysql:3306 - canal.instance.dbUsername=root - canal.instance.dbPassword=123456 - canal.instance.connectionCharset=UTF-8 ``` 2. 将 MySQL 同步到 RabbitMQ 我们可以使用 Logstash 来将 MySQL 的 binlog 数据同步到 RabbitMQ。以下是 Logstash 的配置文件示例: ``` input { jdbc { jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://mysql:3306/test" jdbc_user => "test" jdbc_password => "test" statement => "SELECT * FROM mytable" } } output { rabbitmq { host => "rabbitmq" exchange => "my_exchange" exchange_type => "direct" key => "my_key" durable => true user => "guest" password => "guest" } } ``` 这里,我们首先使用 JDBC 输入插件来读取 MySQL 数据库中的数据。然后,使用 RabbitMQ 输出插件将数据发送到 RabbitMQ 中。 3. 在 yml 文件配置 Canal 的 example 要配置 Canal 的示例,请添加以下行到 Canal 服务的环境变量中: ``` - canal.instance.filter.regex=.*\\..* - canal.instance.filter.black.regex=mysql\\.slave_.*,mysql\\.innodb_.* - canal.instance.filter.table.regex=test\\..* - canal.instance.filter.druid.ddl=true - canal.instance.filter.query.dcl=false - canal.instance.filter.query.dml=false ``` 这将启用 Canal 的示例,并过滤掉一些不需要的数据。 4. 创建 RabbitMQ 队列创建 RabbitMQ 队列,请使用以下命令: ``` docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3 docker exec -it some-rabbit /bin/bash rabbitmqctl add_user guest guest rabbitmqctl set_permissions -p / guest ".*" ".*" ".*" rabbitmqctl add_exchange my_exchange direct rabbitmqctl add_queue my_queue rabbitmqctl bind_queue my_queue my_exchange my_key ``` 这将创建一个名为 `my_queue` 的队列,并将其绑定到名为 `my_exchange` 的交换机上,使用 `my_key` 作为路由键。 希望这些信息可以帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值