Direct

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

在Direct模型下:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)

  • 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey

  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

案例需求如下

  1. 利用@RabbitListener声明Exchange、Queue、RoutingKey

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

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

基于注解声明队列和交换机

基于@Bean的方式声明队列和交换机比较麻烦,Spring还提供了基于注解方式来声明。

在consumer的SpringRabbitListener中添加两个消费者,同时基于注解来声明队列和交换机:

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

消息发送

在publisher服务的SpringAmqpTest类中添加测试方法:

@Test
public void testSendDirectExchange() {// 交换机名称String exchangeName = "leon.direct";// 消息String message = "红色警报!日本乱排核废水,导致海洋生物变异,惊现哥斯拉!";// 发送消息rabbitTemplate.convertAndSend(exchangeName, "red", message);
}

总结

描述下Direct交换机与Fanout交换机的差异?

  • Fanout交换机将消息路由给每一个与之绑定的队列

  • Direct交换机根据RoutingKey判断路由给哪个队列

  • 如果多个队列具有相同的RoutingKey,则与Fanout功能类似

基于@RabbitListener注解声明队列和交换机有哪些常见注解?

  • @Queue

  • @Exchange

SpringAMQP--DirectExchange相关推荐

  1. RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器

    文章目录 1. 入门案例 2. 完成官方Demo中的hello world案例 2.1 创建1个工程,2个模块 2.1.1 父工程的依赖,子工程不需要导入额外的依赖 2.1.2 配置子工程的配置文件( ...

  2. RabbitMQ学习之spring-amqp的重要类的认识

    对于大多数应用来说都做了与spring整合,对于rabbitmq来说.也有与spring的整合.可能通过spring的官网找到spring-amqp项目下载.spring-amqp项目包括三个子项目: ...

  3. SpringAMQP发送与接收消息

    同步调用的优点:时效性较强,可以立即得到结果 同步调用的问题: 1.耦合度高 2.性能和吞吐能力下降 3.有额外的资源消耗 4.有级联失败问题 异步通信的优点: 1.耦合度低 2.吞吐量提升 3.故障 ...

  4. 【微服务】SpringAMQP

    SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便. SpringAmqp的官方地址:https://spring.io/pr ...

  5. MQ介绍,RabbitMQ在SpringAMQP中的使用

    同步调用 优点:时效性强,可以立即得到结果 缺点: 耦合度高,每次加入新需求都要该原来的代码 性能和吞吐能力下降,调用者需要等待提供者响应后才能继续下一步操作 有额外资源消耗,调用者在等待服务响应过程 ...

  6. spring-amqp整合rabbitmq消费者配置和代码

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="UTF-8"?> ...

  7. 八.利用springAMQP实现异步消息队列的日志管理

    经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解.俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...

  8. springAMQP

    Spring AMQP 简介 Sprin有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面:http://spring.io/projects/spring-amqp 注意这里 ...

  9. RabbitMQ第四个实操小案例——DirectExchange

    文章目录 RabbitMQ第四个实操小案例--DirectExchange RabbitMQ第四个实操小案例--DirectExchange DirectExchange:这种交换机的模式跟前面的Fo ...

  10. rabbitmq direct reply-to 在springAMQP和python之间的使用

    背景 公司的一个项目使用rabbitmq作为broker进行交互,并且数据的查询方法使用RPC模式,RPC Client端使用java编写并使用springAMQP包与rabbitmq交互,在RPC ...

最新文章

  1. mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
  2. 银河麒麟V10入选2020中国十大科技新闻
  3. 外媒晒一加7 Pro相机实拍样张:不惧极速F1赛车
  4. 亲和数(220/284)
  5. redis事务冲突问题 - 乐观锁和悲观锁
  6. python之路_数据备份及pymysql模块
  7. 使用PC版Zune以全新的方式体验您的音乐
  8. ResourceManager HA 配置
  9. MySQL(InnoDB剖析):08---InnoDB关键特性(插入缓冲(Insert Buffer)、两次写(doublewrite)、自适应哈希索引(AHI)、异步IO(AIO)、刷新邻接页)
  10. C++操作图像、图片
  11. 【射频知识】吸波材料
  12. 服务器raid状态rebuild,RAID 1 误操作rebuild,如何恢复数据?
  13. Django的视图函数(二):request对象、视图函数返回值(HTML响应、JsonResponse)、反向解析(视图函数)、HttpResponse子类
  14. The server time zone value ‘й‘ is unrecognized or represents more than one time zone
  15. 大河奔流的精神 ——俞敏洪
  16. 【SUMO学习】初级 OSMWebWizard
  17. Wyn Enterprise 仪表板组件间联动设置及关闭
  18. 企业数字化基础设施技术简介
  19. #VERDI# 关于 实用Verdi 的使用技巧
  20. 【数学和算法】梯度和方向导数

热门文章

  1. 走进异步世界:博客程序的异步化改造以及发布后的不理想情况
  2. Qt Load and Save PCL/PLY 加载和保存点云
  3. 时间计算本质理论2-时间产生的虚拟化
  4. protobuf生成as文件
  5. Java并发编程的艺术,解读并发编程的优缺点
  6. Thinkphp3.2微信个人免签支付实例
  7. 如何安装zabbix_get
  8. Service 深度解析
  9. java常用API之DateFormat
  10. JQuery UI 拖拽排序