rabbit入门(二)Exchange(交换机)详解

交换机

交换机,接收消息,根据路由键转发消息到绑定的队列
下图是一个简单的交换机模型生产者产生消息,然后交换机根据路由键将消息转发到特定的队列里面,下图即队列1,然后生产者从队列中(通过管道)获取消息


Exchange

在Rabbitmq之中,消息最终的目的地是由交换机的类型和路由键决定.

绑定键

交换机和队列关系的一种描述

路由键

消息之中消息标签的内容,描述了消息最终到达哪些队列之中.

交换机属性

常用:
Name:交换机名称
Type: 交换机类型(direct,topic,fanout,headers)
Durability: 是否需要持久化,true为持久化
Autodelete: 当最后一个绑定Exchange的队列删除之后,自动删除该Exchange
扩展:
Internal: 当前Exchange是否用于RabbitMQ内部使用,默认为false (百分之99的情况默认为false 除非对Erlang语言较了解,做一些扩展)
Arguments: 扩展参数, 用于扩展AMQP协议可自定化使用

交换机分类

交换机类型

交换机的1分类主要是按照交换机类型分类的,分四类(direct直连交换机,Topic主题交换机,fanout扇形交换机,headers头交换机)

1,direct 直连交换机

Direct模式可以使用RabbitMQ自带的Exchange: default Exchange,所以不需要将Exchange进行任何绑定(binding)操作,消息传递时,RoutingKey必须完全匹配才会被队列接收,否则该消息会被抛弃
即:直连型交换机是更具携带的路由键将消息投递给对应队列的,步骤如下:

1,将一个队列绑定到某个交换机上,同时赋予该绑定一个路由键(routing key)
2,当一个携带着路由值为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列。
也就是说,将队列和交换机绑定,之后此绑定赋予一个路由键,当消息传递过来,只有完全匹配绑定绑定的路由键,队列才会接受。
eg:


直连交换机

我们可以看到最大的特点就是路由键与绑定键一致的消息才能发送到指定的队列上面.

2,topic 主题交换机

主题交换机(topic exchanges)中,队列通过路由键绑定到交换机上,然后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列。和直连交换机区别
1,直连交换机之间的绑定键是一个具体的值,而主题交换机交换机和队列之间的绑定关系是一个模糊字符串
eg:主题交换机


主题交换机

主题交换机
3,funout 扇形交换机

扇形交换机 :
扇型交换机(funout exchange)将消息路由给绑定到它身上的所有队列。不同于直连交换机,路由键在此类型上不启任务作用。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的发送给这所有的N个队列
对于扇形交换机来说路由键是没有意义的,只要他有消息,他就会发送到它所绑定的所有队列上

Headers exchange(头交换机)
类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。

此交换机有个重要参数:”x-match”
当”x-match”为“any”时,消息头的任意一个值被匹配就可以满足条件
当”x-match”设置为“all”的时候,就需要消息头的所有值都匹配成功

其他

Dead Letter Exchange(死信交换机)
在默认情况,如果消息在投递到交换机时,交换机发现此消息没有匹配的队列,则这个消息将被悄悄丢弃。为了解决这个问题,RabbitMQ中有一种交换机叫死信交换机。当消费者不能处理接收到的消息时,将这个消息重新发布到另外一个队列中,等待重试或者人工干预。这个过程中的exchange和queue就是所谓的”Dead Letter Exchange 和 Queue”

参考:https://blog.csdn.net/hry2015/article/details/79118804

你可能感兴趣的:(rabbit入门(二)Exchange(交换机)详解)