三、七种消息收发模型之Publish/Subscribe

发布订阅模式
四种交换机:
1 Direct交换机:
通过routing_key将信息路由给对应的queue,消费者监听对应的queue获取消息
分为三步:
1 创建队列
@Bean Queue directQueue1(){ return new Queue(DIRECT_QUEUE_NAME,true,false,false); }
2 创建交换机
/** * 定义一个直连交换机 * @return */ @Bean DirectExchange directExchange(){ //1.交换机名称 //2.交换机是否持久化(交换机本身是否持久化) //3.如果没有与之绑定的队列,是否需要移除交换机 return new DirectExchange(DIRECT_EXCHANGE_NAME,true,false); }
3 将队列和交换机进行绑定
/** * 这个定义是将交换机和队列绑定起来 * @return */ @Bean Binding directBinding1(){ return BindingBuilder //设置绑定的队列 .bind(directQueue1()) //设置绑定的交换机 .to(directExchange()) //设置routing_key .with(DIRECT_QUEUE_NAME); }
完整配置类
/** * Direct:这种路由策略,将消息队列绑定到DirectExchange上,当消息到达交换机的时候,消息会携带一个routing_key,然后交换机会找到名为routing_key的队列,将消息路由过去 */ @Configuration public class RabbitConfig { public static final String DIRECT_QUEUE_NAME="direct_queue_name"; public static final String DIRECT_QUEUE_NAME2="direct_queue_name2"; public static final String DIRECT_EXCHANGE_NAME="direct_exchange_name"; @Bean Queue directQueue1(){ return new Queue(DIRECT_QUEUE_NAME,true,false,false); } @Bean Queue directQueue2(){ return new Queue(DIRECT_QUEUE_NAME2,true,false,false); } /** * 定义一个直连交换机 * @return */ @Bean DirectExchange directExchange(){ //1.交换机名称 //2.交换机是否持久化(交换机本身是否持久化) //3.如果没有与之绑定的队列,是否需要移除交换机 return new DirectExchange(DIRECT_EXCHANGE_NAME,true,false); } /** * 这个定义是将交换机和队列绑定起来 * @return */ @Bean Binding directBinding1(){ return BindingBuilder //设置绑定的队列 .bind(directQueue1()) //设置绑定的交换机 .to(directExchange()) //设置routing_key .with(DIRECT_QUEUE_NAME); } /** * 将第二个队列也绑定到同一个交换机 * @return */ @Bean Binding directBinding2(){ return BindingBuilder //设置绑定的队列 .bind(directQueue2()) //设置绑定的交换机 .to(directExchange()) //设置routing_key .with(DIRECT_QUEUE_NAME2); } }
2 Fanout交换机:
分类:
RabbitMQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具