RabbitMQ(三)工作原理及核心概念

在这里插入图片描述

官网地址:https://www.rabbitmq.com/

下载地址:https://www.rabbitmq.com/download.html

RabbitMQ 的5大核心概念:

  • Connection:连接
  • Channel:信道
  • Exchange:交换机
  • Queue:队列
  • Virtual host:虚拟主机

工作原理图

在这里插入图片描述

  • 中间的 Broker 表示 RabbitMQ 服务,每个 Broker 里面至少有一个 Virtual host 虚拟主机;
  • 每个虚拟主机中有自己的 Exchange 交换机、Queue 队列,Exchange 与 Queue 通过 Binding 绑定;
  • Producer 和 Consumer 通过 Connection 来保持联系,然后在 Connection 的基础上建立若干 Channel 信道,用来发送和接收消息;
  • Connection 和 Channel 类似电缆和光纤的关系,一对多。

1.Connection 连接

  • 每个 producer 或者 consumer 要通过 RabbitMQ 发送与消费消息,首先就要与 RabbitMQ 建立连接,这个连接就是Connection。Connection是一个TCP长连接。

2.Channel 信道

  • Channel是在Connection的基础上建立的虚拟连接,RabbitMQ中大部分的操作都是使用Channel完成的,比如:声明Queue、声明Exchange、发布消息、消费消息等。

  • 看到此处,你是否有这样一个疑问:既然已经有了Connection,我们完全可以使用Connection完成Channel的工作,为什么还要引入Channel这样一个虚拟连接的概念呢?因为现在的程序都是支持多线程的,如果没有Channel,那么每个线程在访问RabbitMQ时都要建立一个Connection这样的TCP连接,对于操作系统来说,建立和销毁TCP连接是非常大的开销,在系统访问流量高峰时,会严重影响系统性能。

  • Channel就是为了解决这种问题,通常情况下,每个线程创建单独的Channel进行通讯,每个Channel都有自己的channel id帮助Broker和客户端识别Channel,所以Channel之间是完全隔离的。

3.Virtual host 虚拟主机

​ Virtual host是一个虚拟主机的概念,一个Broker中可以有多个Virtual host,每个Virtual host都有一套自己的Exchange和Queue,同一个Virtual host中的Exchange和Queue不能重名,不同的Virtual host中的Exchange和Queue名字可以一样。这样,不同的用户在访问同一个RabbitMQ Broker时,可以创建自己单独的Virtual host,然后在自己的Virtual host中创建Exchange和Queue,很好地做到了不同用户之间相互隔离的效果。

扫描二维码关注公众号,回复: 14555678 查看本文章

4.Queue 队列

​ Queue是一个用来存放消息的队列,生产者发送的消息会被放到Queue中,消费者消费消息时也是从Queue中取走消息。

5.Exchange 交换机

​ Exchange是一个比较重要的概念,它是消息到达RabbitMQ的第一站,主要负责根据不同的分发规则将消息分发到不同的Queue,供订阅了相关Queue的消费者消费到指定的消息。那Exchange有哪些分发消息的规则呢?这就要说到Exchange的4种类型了:direct、fanout、topic、headers。

​ 在介绍这4种类型的Exchange之前,我们先来了解一下另外一个比较重要的概念:Routing key,翻译成中文就是路由键。当我们创建好Exchange和Queue之后,需要使用Routing key(通常叫作Binding key)将它们绑定起来,producer在向Exchange发送一条消息的时候,必须指定一个Routing key,然后Exchange接收到这条消息之后,会解析Routing key,然后根据Exchange和Queue的绑定规则,将消息分发到符合规则的Queue中。

5.1 direct

​ direct的意思是直接的,direct类型的Exchange会将消息转发到指定Routing key的Queue上,Routing key的解析规则为精确匹配。也就是只有当producer发送的消息的Routing key与某个Binding key相等时,消息才会被分发到对应的Queue上。

5.2 fanout

​ fanout是扇形的意思,该类型通常叫作广播类型。fanout类型的Exchange不处理Routing key,而是会将发送给它的消息路由到所有与它绑定的Queue上。

5.3 topic

topic的意思是主题,topic类型的Exchange会根据通配符对Routing key进行匹配,只要Routing key满足某个通配符的条件,就会被路由到对应的Queue上。通配符的匹配规则如下:

● Routing key必须是一串字符串,每个单词用“.”分隔;

● 符号“#”表示匹配一个或多个单词;

● 符号“*”表示匹配一个单词。

例如:“*.123” 能够匹配到 “abc.123”,但匹配不到 “abc.def.123”;“#.123” 既能够匹配到 “abc.123”,也能匹配到 “abc.def.123”。

5.4 headers

​ 日常工作中,以上三种类型的Exchange已经能够满足我们基本上所有的需求了,headers模式并不经常使用,我们只需要对headers Exchange有一个基本的了解就可以了。

​ headers Exchange中,Exchange与Queue之间的绑定不再通过Binding key绑定,而是通过Arguments绑定。





参考地址:

  1. RabbitMQ的工作模式及原理,https://baijiahao.baidu.com/s?id=1732891548341088166&wfr=spider&for=pc

猜你喜欢

转载自blog.csdn.net/qq_33204709/article/details/128655894