首页 > 其他分享 >RabbitMQ原理和架构图解(附6大工作模式)

RabbitMQ原理和架构图解(附6大工作模式)

时间:2022-09-29 09:44:05浏览次数:85  
标签:架构 消费者 队列 RabbitMQ 交换机 消息 图解 路由

为什么要使用RabbitMQ?

1.解耦

系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦。

2.异步

将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。

3.削峰

并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。

 

RabbitMQ原理和架构

RabbitMQ的技术架构如下图所示:

1.生产者(Publisher)

发消息到RabbitMQ中的(Exchange)交换机上。

2.交换机(Exchange)

和生产者建立连接并接收生产者发来的消息

3.消费者(Consumer)

监听RabbitMQ中的(Queue)队列中的消息

4.队列(Queue)

Exchange将消息发送到指定的Queue中,Queue和消费者进行交互

5.路由(Routes)

交换机转发消息到队列的规则

 

RabbitMQ的核心概念

1)Broker

Broker,简单来说就是消息队列服务器实体。

 

2)Exchange

Exchange(消息交换机),它指定消息按什么规则,路由到哪个队列。

 

3)Queue

Queue(消息队列载体),每个消息都会被投入到一个或多个队列。

 

4)Binding

Binding(绑定),它的作用就是把exchange和queue按照路由规则绑定起来。

 

5)Routing Key

Routing Key(路由关键字),exchange根据这个关键字进行消息投递;

 

6)VHost

vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中);

 

7)Producer

Producer(消息生产者),就是投递消息的程序;

 

8)Consumer

Consumer(消息消费者),就是接受消息的程序;

 

9)Channel

Channel(消息通道),在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

 

RabbitMQ 的工作模式?

RabbitMQ提供了6种模式:

1、简单模式

生产者,一个队列一个或多个消费者,当多个消费者同时监听一个队列时,他们并不能同时消费一条消息,而是随机消费消息,即一个队列中一条消息,只能被一个消费者消费。

2、主题模式(topic)

生产者,一个交换机(topicExchange),模糊匹配路由规则,多个队列,多个消费者。

3、订阅与发布模式(fanout)

生产者,一个交换机(fanoutExchange),没有路由规则,多个队列,多个消费者。生产者将消息不是直接发送到队列,而是发送到X交换机,然后由交换机发送给两个队列,两个消费者各自监听一个队列,来消费消息。

4、路由模式(direct)

生产者,一个交换机(directExchange),路由规则,多个队列,多个消费者。主要根据定义的路由规则决定消息往哪个队列发送。

5、RPC模式

对于RPC请求,客户端发送一条带有两个属性的消息:replyTo,设置为仅为请求创建的匿名独占队列,和correlationId,设置为每个请求的唯一id值。请求被发送到rpc_queue队列。RPC工作进程在队列上等待请求。当一个请求出现时,它执行任务,并使用replyTo字段中的队列将结果发回客户机。客户机在回应消息队列上等待数据。当消息出现时,它检查correlationId属性。如果匹配请求中的值,则向程序返回该响应数据。

6、工作队列

注释:默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为循环法。

以上

作者简介

陈睿|mikechen,10年+大厂架构经验,《BAT架构技术500期》系列文章作者,专注于互联网架构技术。

阅读mikechen的互联网架构更多技术文章合集

Java并发|JVM|MySQL|Spring|Redis|分布式|高并发

标签:架构,消费者,队列,RabbitMQ,交换机,消息,图解,路由
From: https://www.cnblogs.com/mikechenshare/p/16740337.html

相关文章

  • nginx架构分析之 模块化
    Nginx涉及到的模块分为核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块以及第三方模块等五大类。核心模块核心模块是指Nginx服务器正常运行时必不可少的模块,它们提供了......
  • 大型网站技术架构+核心原理与案例分析 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1Ux6FDAIf5OnEaDZqmppPUg点击这里获取提取码 ......
  • Python总体架构、Python对象
    Python总体架构Python的整体架构主要分为3个部分:1.左边是Python提供的大量模块、库以及用户自定义的模块。2.右边是Python的运行时环境,包括对象/类型系统、内存分配器和......
  • CTO也糊涂的常用术语:功能模块、业务架构、用户需求……[20210217更新]
    功能模块、业务架构、需求分析、用户需求、系统分析、功能设计、详细设计、文档、业务、技术……很多被随口使用的名词,其实是含糊甚至错误的。到底含糊在哪里,错误在哪里,不仅......
  • 分布式架构下如何选择最佳 Store?
    分布式架构下如何选择最佳Store?一、背景开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有3份,分别存储在各节点下的不同Store中。在多节点多S......
  • SpringBoot 整合RabbitMq 实战
    SpringBoot整合RabbitMq实战参考官网:​​https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-messaging.html#boot-features-amqp​​spri......
  • 什么是 Serverless 架构?
    简介: 什么是Serverless架构?Serverless与AI机器学习之间怎样碰撞出火花? 随着时间的推移,Serverless架构变得越来越火热,凭借着极致弹性、按量付费、低成......
  • 实战指南 | Serverless 架构下的应用开发
    简介: 基于Serverless架构的应用开发流程将会比基于传统架构的应用开发更简单。在Serverless架构下进行应用开发,用户通常只需要按照规范编写代码、构建产物,然后部署到......
  • 分布式架构下如何选择最佳 Store?
    分布式架构下如何选择最佳Store?一、背景开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有3份,分别存储在各节点下的不同Store中。在多节点多......
  • 云原生微服务架构
    ......