三、七种消息收发模型之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交换机: