首页 > 其他 > 详细

rabbitMQ基础知识--交换机

时间:2019-10-26 18:48:01      阅读:88      评论:0      收藏:0      [点我收藏+]

1、交换机类型:4种:Direct exchange、Fanout exchange、Topic exchange、Headers exchange

Direct exchange:直连交换机(默认的交换机),转发消息到routigKey指定的队列,是一种完全匹配的关系。这种模式下,routingKey与队列之间可以是一对一,一对多,多对多,多对一等形式。 只要发送消息的routingKey与交换机的 一致,就会把消息放到对应的队列。

rabbitTemplate.convertAndSend(exchange, routingKey, message, correlationId);
比如:发送的消息的key是:key2,那么testQueue1、testQueue2队列中都会有这个消息。

技术分享图片

 

 

技术分享图片

 

 

直连交换机是一种带路由功能的交互机,一个队列通过routing_key与一个交换机绑定,当消息被发送的时候,需要指定一个routing_key,这个消息被送达交换机的时候,就会被交换机送到指定的队列里面去。同样一个routing_key也是支持应用到多个队列中的,当一个交换机绑定多个队列时,消息就会被送到对应的队列去处理。

 

 适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。

 

 

Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快)

Topic exchange:主题交换机,按规则转发消息(最灵活)

直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息队列的管理就会异常的困难。

 

所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。

 

主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:

*表示一个单词

#表示任意数量(零个或多个)单词。

 

假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息:

 

fast..

..white

fast.#

……

下图来源于网上,感觉对主题交换机的描述比较到位:

 技术分享图片

 

 

适用场景:消息需要基于多重条件进行路由到达对应队列,例如:日志系统,不仅可以根据日志的级别而且能根据日志的来源进行订阅。

 

Headers exchange:首部交换机 (未接触)

rabbitMQ基础知识--交换机

原文:https://www.cnblogs.com/zhaoyansheng163/p/11744001.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!