目录
一.交换机
1.Exchange
在RabbitMQ中,生产者发送消息不会直接将消息投递到队列中,而是先将消息投递到交换机中,在由交换机转发到具体的队列,队列再将消息以推送或者拉取方式给消费者进行消费
生产者将消息发送到Exchange,由Exchange再路由到一个或多个队列中
2.路由键( Routingkey)
生产者将消息发送给交换机的时候,会指定RoutingKey指定路由规则。
3.绑定键(Bindi ngKey)
通过绑定键将交换机与队列关联起来,这样RabbitMQ就知道如何正确地将消息路由到队列。
4.小结
生产者将消息发送给哪个Exchange是需要由RoutingKey决定的,生产者需要将Exchange与哪个队列绑定时需要由BindingKey决定的。
二.交换机类型
1.直连交换机: Direct exchange
直连交换机的路由算法非常简单:将消息推送到binding key与该消息的routing key相同的队列.
直连交换机X上绑定了两个队列。第一个队列绑定了绑定键orange,第二个队列有两个绑定键:black和green
在这种场景下,一个消息在布时指定了路由键为orange将会只被路由到队列Q1,路由键为black和green的消息都将被路由到队列Q2。其他的消息都将被丢失
同一个绑定键可以绑定到不同的队列上去,可以增加一个交换机X与队列Q2的绑定键,在这种情况下,直连交换机将会和广播交换机有着相同的行为,将消息推送到所有匹配的队列。一个路由键为black的消息将会同时被推送到队列Q1和Q2.
2.主题交换机: Topic exchange
直连交换机的缺点:
直连交换机 grouting key 方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的 routing key .假设每个交换机上都绑定一维的 routing key 连搜到各个队列上、那么消息的管理求会异常地困难。
主题交换机的特点:
发送到主题交换机的消息不能有任意的 routing key ,必须是由点号分开的一串单词,这些单词可以是任意的,但通常是与消息相关的一些特征
比如以下是几个有效的: routing key :" stock . usd . nyse "," nyse . vmw ”," quick . orange . rabblt ”, routing key 的单词可以有很多,最大限制是255 bytes .
Topic 交换机的逻辑与 direct 交换机有点相似使用特定路由键发送的消息将被发送到所有使用匹配绑定键绑定的队列,然而,绑定键有两个特殊的情况:
①表示匹配任意一个单词
②表示匹配任意一个或多个单词
延申
当一个队列的绑定健是°#,它将会接收所有的消息,而不再考慮所接收消息的路由键
当一个队列的绑定键没有用到#和*时,它又像 direct 交换一样工作。
3.扇形交换机: Fanout exchange
扇形交换机是最基本的交换机类型,它所能做的事悄非常简单广播消息。
扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。
4.首部交换机: Headers exchange
首部交换机和扇形交换机都不界要路由键 ro