当前位置: 首页 > article >正文

RabbitMQ 入门(六)SpringAMQP五种消息类型(Direct Exchange)

一、发布订阅-DirectExchange(路由模式)

        在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。

        Direct Exchange 会将接收到的消息根据规则路由到指定queue,因此称为路由模式(routes)。

       - 每一个Queue都与Exchange设置一个BindingKey
       - 发布者发送消息时,指定消息的RoutingKey
       - Exchange将消息路由到BindingKey与消息RoutingKey一致的队列;
       - 一个Queue可以绑定多个BindingKey,也就是说Direct Exchange可以模拟Fanout但是比Fanout灵活。


 在Direct模型下:

- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个`RoutingKey`(路由key)
- 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 `RoutingKey`。
- Exchange不再把消息交给每一个绑定的队列,而是根据消息的`Routing Key`进行判断,只有队列的`Routingkey`与消息的 `Routing key`完全一致,才会接收到消息
 

二、DirectExchange演示案例

实现思路如下:

1. 利用@RabbitListener声明Exchange、Queue、RoutingKey(不使用bean声明,基于@RabbitListener注解声明)

2. 在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2

3. 在publisher中编写测试方法,向it. direct发送消息

具体步骤:

步骤一:

1.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2,

2.并利用@RabbitListener声明Exchange、Queue、RoutingKey

@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "direct.queue1"),
    exchange = @Exchange(name = "it.direct", type = ExchangeTypes.DIRECT),
    key = {"red", "blue"}
))
public void listenDirectQueue1(String msg){
    System.out.println("消费者接收到direct.queue1的消息:【" + msg + "】");
}

@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "direct.queue2"),
    exchange = @Exchange(name = "it.direct", type = ExchangeTypes.DIRECT),
    key = {"red", "yellow"}
))
public void listenDirectQueue2(String msg){
    System.out.println("消费者接收到direct.queue2的消息:【" + msg + "】");
}

步骤二:在publisher服务的SpringAmqpTest类中添加测试方法,向it. direct发送消息

@Test
public void testSendDirectExchange() {
    // 交换机名称
    String exchangeName = "it.direct";
    // 消息
    String message = "hello,red!";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "red", message);
}

        

 Direct模式总结: 


Direct交换机与Fanout交换机的差异:

- Fanout交换机将消息路由给每一个与之绑定的队列
- Direct交换机根据RoutingKey判断路由给哪个队列
- 如果多个队列具有相同的RoutingKey,则与Fanout功能类似

基于@RabbitListener注解声明队列和交换机常见注解:

 @Queue
 @Exchange


http://www.kler.cn/news/355786.html

相关文章:

  • QT笔记00 记事本项目
  • 鸿蒙网络编程系列30-断点续传下载文件示例
  • Support package for Hovl Studio assets 材质转换器
  • QT:数据库,opencv
  • 创建工具类之获取SqlSession
  • Docker 用例:15 种最常见的 Docker 使用方法
  • 浅析Android中View的测量布局流程
  • 深入理解Mysql(一)
  • 云端多租户智能管理云图采用先进的虚拟化技术
  • 勤于奋身体倒下还是上来回答粉丝关于Adsense赚美金
  • React 列表 Keys
  • Hbase 几种scan方式
  • 初学C++(缺省参数、函数重载等)
  • Linux隐藏权限介绍
  • 使用Shell脚本对Java应用等服务进行启停控制(支持批量)
  • 技术总结(八)
  • STM32笔记(1)GPIO之点亮LED
  • Vue3 路由基础 01
  • “大放水救股市”会有怎样的结果?
  • .NET 6 API + Middleware + Audit rail