码迷,mamicode.com
首页 > 其他好文 > 详细

rabbitMQ基础知识--交换机

时间:2019-10-26 19:26:31      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:convert   bin   匹配   head   mes   网上   任务   路由   需要   

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基础知识--交换机

标签:convert   bin   匹配   head   mes   网上   任务   路由   需要   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!