Micronaut多RabbitMQ连接下如何在ChannelPoolListener为指定连接创建队列
实现步骤
首先确认你已经正确引入了io.micronaut.rabbitmq:micronaut-rabbitmq依赖,无需额外引入其他包。
1. 实现绑定指定连接的ChannelPoolListener
Micronaut 中对命名RabbitMQ连接的资源绑定通过@Named注解实现,你只需要给自定义的ChannelPoolListener添加值为configbus的@Named注解,就会自动绑定到你配置的configbus连接上,仅针对该连接的通道创建事件触发逻辑。
完整代码示例如下:
import io.micronaut.context.annotation.Named; import io.micronaut.rabbitmq.connect.ChannelPoolListener; import com.rabbitmq.client.Channel; import jakarta.inject.Singleton; import java.io.IOException; @Singleton @Named("configbus") public class ConfigbusRabbitResourceInitializer implements ChannelPoolListener { @Override public void onChannelCreated(Channel channel) throws IOException { // 声明交换机 示例为持久化direct类型交换机 channel.exchangeDeclare( "your_config_exchange", // 自定义交换机名称 "direct", // 交换机类型,按需修改为topic/fanout等 true, // 是否持久化 false, // 是否自动删除 null // 额外参数,声明特殊队列时可传入 ); // 声明队列 示例为持久化普通队列 channel.queueDeclare( "your_config_queue", // 自定义队列名称 true, // 是否持久化 false, // 是否排他 false, // 是否自动删除 null // 额外参数 ); // 绑定队列到交换机,指定routing key channel.queueBind( "your_config_queue", "your_config_exchange", "your_config_routing_key" // 自定义routing key ); // 可按需添加更多交换机、队列、绑定的声明逻辑 } @Override public void onChannelDestroyed(Channel channel) { // 通道销毁时的回调逻辑,无特殊需求可留空 } }
2. 验证效果
启动Micronaut应用后,逻辑会自动执行:
- 仅
configbus对应的5672端口RabbitMQ实例会创建你声明的交换机和队列 - 另一个
eventbus连接的5671端口RabbitMQ实例不会被该逻辑影响
注意事项
- RabbitMQ的
exchangeDeclare、queueDeclare方法本身是幂等的,只要声明参数和已存在的资源一致,重复调用不会抛出异常 - 如果需要声明死信队列、延迟队列等特殊资源,直接在声明方法的参数中传入对应的扩展配置即可
内容的提问来源于stack exchange,提问作者abedurftig
相关产品推荐
相关产品推荐

