Exchange(交换机)
Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:
- direct:直接
- fanout:广播,
- topic:主题,就是发布订阅那种模式
- headers :headers 匹配 AMQP 消息的 header 而不是路由键,headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类
direct、header 是一致的,它们都是JMS中说的点对点通信方式实现
fanout、topic则是发布订阅的一些实现
交换机的类型不同,最终路由到的地方就不一样
创建一个交换机
你的ip:15672
创建一个队列
交换机绑定队列
一创建之后,点进交换机,交换机的绑定关系里面,就会发现已经与队列 indi 绑定上了
Direct Exchange(直接交换机)
它将消息直接交给一个指定的队列,路由键需要按照绑定关系精确匹配
比如,现在有一个直接交换机,它绑定了3个队列,第一个叫 dog,第二个叫 dog.gurad,第三个叫 dog.puppy,如果说消息发送过来,我们用的路由键叫 dog,那它就会精确的只发送给 dog 队列,实现消息最终只能到达一个队列,这就叫直接类型交换机,也称为单播模式、点对点通信
路由键是跟交换机和队列的绑定关系进行匹配的,我们将这种匹配称之为路由键的完全匹配
发消息是发给交换机,监听消息是监听队列,交换机将消息交给队列了,那么监听这个队列的人就会拿到消息
示例
先创建好交换机、队列,并建立绑定关系
Fanout Exchange(广播类型交换机)
如果交换机下绑定了3个队列,消息一到达交换机,这3个队列都会收到, 这个消息会广播出去,根本就不关心路由键是什么,把所有消息都通过交换机广播给它绑定的所有队列,被称为广播模式
示例
Topic Exchange(主题类型交换机)
虽然它也是广播模式,比如它绑定了几个交换机,但是它可以指定某些交换机来发送消息,其余没指定的,则不会收到消息,所以它是部分广播,主要是根据路由键匹配将消息发个队列,这就是主题-发布订阅模式
它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。
它同样也会识别两个通配符:符号 “#” 和符号 “*”。
# 匹配 0 个或多个单词,
* 匹配一个单词
以上面的 usa.# 为例,所有 usa 开头的路由键会进入这个队列
而 #.news ,则是所有以 news 结尾的路由键会进入这个队列
Name:交换机名称
Type:交换机类型
Durability:Durable(持久化)/ Transient(临时)
Auto delete:是否自动删除,会在没有任何队列绑定它时自动删除
Internal:是否为内部交换机,如果是,客户端则无法给交换机发消息,可能只供转发路由使用
示例