使用SpringAMQP实现发布订阅模型之Direct Exchange
Direct Exchange:路由
一、路由模式
在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。
Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)。
在Direct模型下:
队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey
(路由key)
消息的发送方在 向 Exchange发送消息时,也必须指定消息的RoutingKey
。
Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key
进行判断,只有队列的Routingkey
与消息的Routing key
完全一致,才会接收到消息
二、模拟计划
不再使用声明 bean 的方式去声明交换机、队列等,这样太麻烦了,这次直接利用@RabbitListener声明Exchange、Queue、RoutingKey
在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
在publisher中编写测试方法,向gentlebrother. direct发送消息
三、模拟Direct
1.基于注解声明队列和交换机
基于 @Bean 的方式声明队列和交换机比较麻烦,Spring 还提供了基于注解
@RabbitListener
方式来声明。
在 consumer 的 SpringRabbitListener 中添加两个消费者,同时基于注解来声明队列和交换机:
package cn.itcast.mq.listener;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
i