RabbitMQ基本概念——Channel、RoutingKey、Exchange

RabbitMQ基本概念——Channel、RoutingKey、Exchange

博客原地址链接:

http://www.lizhenghao.site/blog/2022/02/07/191

先上一张RabbitMQ的结构图:

rabbitMQ工作流

Channel(信道)
Channel是生产者消费者和RabbitMQ通信的方式,它是建立在TCP连接之上的一个虚拟连接,也就是类似于生产者A要和RabbitMQ通信,那么A在程序运行的时候先起一个TCP连接连上RabbitMQ,后面每次需要发消息的时候就开一个线程,然后基于这条TCP连接发送数据,因此每个信道都是唯一的,同时对应了一个线程。

img

参考:

https://www.cnblogs.com/ylsx/p/13295149.html
https://www.cnblogs.com/kry-stal/p/11693830.html
RoutingKey
RoutingKey的作用就是给真正存放消息的队列打上一个标签Tag,然后路由Exchange根据不同的规则去和RoutingKey匹配,从而将生产者发送的消息发送到对应的队列里面去。

Exchange
Exchange交换机,它的作用就负责把生产者的消息发送到队列中,供消费者取走消费。交换机的工作模式常用的有以下几种:

1.Direct
rabbitMQ工作流_direct

Direct模式很简单,就是严格匹配的模式,只有消息发送的时候选择的RoutingKey和绑定时的RoutingKey完全一致时交换机才会把这个消息插入到该队列中。

2.Fanout
rabbitMQ工作流_fanout

Fanout扇形模式,也就是广播模式,不需要匹配RoutingKey,只要绑定过的队列全部都会发送,因此如果发送了一个消息Hello World!,那么每个绑定的队列中都会有条相同的消息。

3.Topic
rabbitMQ工作流_Topic

Topic模糊匹配模式,跟扇形模式类似,区别在于不是全部发送,而是使用正则表达式进行匹配,如果和消息发送时填的RoutingKey匹配上了就插入到该队列中,下面介绍两种常用的匹配字符:

*:该符号表示匹配任意一个字符,例如Animal.*可以匹配Animal.A、Animal.B,但是不能匹配Animal.AB。
#:该符号表示匹配任意多个字符,例如Animal.#可以匹配Animal.Cat、Animal.Dog、Animal.Mouse。
4.Headers
rabbitMQ工作流_headers

通过key-value的方式来匹配是否将该消息插入到队列中,其中有两种匹配方式:

any:表示任意一个key-value匹配上了就插入队列
all:表示必须所有key-value匹配上了就插入队列

你可能感兴趣的:(rabbitmq,分布式,java)