SpringAMQP--DirectExchange
Direct
在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。
在Direct模型下:
队列与交换机的绑定,不能是任意绑定了,而是要指定一个
RoutingKey
(路由key)消息的发送方在 向 Exchange发送消息时,也必须指定消息的
RoutingKey
。Exchange不再把消息交给每一个绑定的队列,而是根据消息的
Routing Key
进行判断,只有队列的Routingkey
与消息的Routing key
完全一致,才会接收到消息
案例需求如下:
利用@RabbitListener声明Exchange、Queue、RoutingKey
在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
在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相关推荐
- RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器
文章目录 1. 入门案例 2. 完成官方Demo中的hello world案例 2.1 创建1个工程,2个模块 2.1.1 父工程的依赖,子工程不需要导入额外的依赖 2.1.2 配置子工程的配置文件( ...
- RabbitMQ学习之spring-amqp的重要类的认识
对于大多数应用来说都做了与spring整合,对于rabbitmq来说.也有与spring的整合.可能通过spring的官网找到spring-amqp项目下载.spring-amqp项目包括三个子项目: ...
- SpringAMQP发送与接收消息
同步调用的优点:时效性较强,可以立即得到结果 同步调用的问题: 1.耦合度高 2.性能和吞吐能力下降 3.有额外的资源消耗 4.有级联失败问题 异步通信的优点: 1.耦合度低 2.吞吐量提升 3.故障 ...
- 【微服务】SpringAMQP
SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便. SpringAmqp的官方地址:https://spring.io/pr ...
- MQ介绍,RabbitMQ在SpringAMQP中的使用
同步调用 优点:时效性强,可以立即得到结果 缺点: 耦合度高,每次加入新需求都要该原来的代码 性能和吞吐能力下降,调用者需要等待提供者响应后才能继续下一步操作 有额外资源消耗,调用者在等待服务响应过程 ...
- spring-amqp整合rabbitmq消费者配置和代码
2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="UTF-8"?> ...
- 八.利用springAMQP实现异步消息队列的日志管理
经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解.俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...
- springAMQP
Spring AMQP 简介 Sprin有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面:http://spring.io/projects/spring-amqp 注意这里 ...
- RabbitMQ第四个实操小案例——DirectExchange
文章目录 RabbitMQ第四个实操小案例--DirectExchange RabbitMQ第四个实操小案例--DirectExchange DirectExchange:这种交换机的模式跟前面的Fo ...
- rabbitmq direct reply-to 在springAMQP和python之间的使用
背景 公司的一个项目使用rabbitmq作为broker进行交互,并且数据的查询方法使用RPC模式,RPC Client端使用java编写并使用springAMQP包与rabbitmq交互,在RPC ...
最新文章
- mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
- 银河麒麟V10入选2020中国十大科技新闻
- 外媒晒一加7 Pro相机实拍样张:不惧极速F1赛车
- 亲和数(220/284)
- redis事务冲突问题 - 乐观锁和悲观锁
- python之路_数据备份及pymysql模块
- 使用PC版Zune以全新的方式体验您的音乐
- ResourceManager HA 配置
- MySQL(InnoDB剖析):08---InnoDB关键特性(插入缓冲(Insert Buffer)、两次写(doublewrite)、自适应哈希索引(AHI)、异步IO(AIO)、刷新邻接页)
- C++操作图像、图片
- 【射频知识】吸波材料
- 服务器raid状态rebuild,RAID 1 误操作rebuild,如何恢复数据?
- Django的视图函数(二):request对象、视图函数返回值(HTML响应、JsonResponse)、反向解析(视图函数)、HttpResponse子类
- The server time zone value ‘й‘ is unrecognized or represents more than one time zone
- 大河奔流的精神 ——俞敏洪
- 【SUMO学习】初级 OSMWebWizard
- Wyn Enterprise 仪表板组件间联动设置及关闭
- 企业数字化基础设施技术简介
- #VERDI# 关于 实用Verdi 的使用技巧
- 【数学和算法】梯度和方向导数