首页 > 其他分享 >RabbitMQ(—)基础概念

RabbitMQ(—)基础概念

时间:2023-02-21 20:01:31浏览次数:52  
标签:RoutingKey 基础 RabbitMQ 概念 信道 交换机 TCP 消息

一个生产者-消费者模型,主要用于接收、存储和转发消息。

可以类比成A寄东西给B,A将包裹送到邮局,邮局根据包裹地址和自己服务区域的地址匹配,打包装车,最后通过快递员送到B手上;RabbitMQ相当于邮局、邮箱、快递员整个系统。宏观上看就是A将包裹给系统,系统将包裹给到B

参照:

超详细的RabbitMQ入门,看这篇就够了!-阿里云开发者社区 (aliyun.com)

rabbitMQ中的Vhost理解、创建和使用 - 不变的变 - 博客园 (cnblogs.com)

《RabbitMQ实战指南》

结构图:
img

概念解析

生产者(Producer)——投递消息,发布到RabbitMq中。

虚拟主机(virtual host)——每一个RabbitMQ服务器都能创建虚拟消息服务器,我们称之为虚拟主机。每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的交换机、队列、绑定等,拥有自己的权限机制

连接

连接(Connection)——基于TCP创建连接

信道(Channel)——信道是建立在Connection之上的虚拟连接,

  • Rabbitmq每条AMQP指令都是通过信道完成的
  • 每个信道都会被指派一个唯一ID
  • 每个线程把持一个信道,这样可保证每个线程的私密性,就像独立的连接一样
  • 建立信道主要是实现TCP连接复用,避免多个线程生产或者消费消息时创建太多TCP连接,创建和销毁TCP连接对系统是很昂贵的开销,也便于管理

Connection与Channel的关系类比:就像一条公路,公路上划分了多个车道

因为每个TCP带宽有限,太多信道复用一个Connection也会产生性能瓶颈,进而使得整体的流量被限制


RabbitMQ Server(Broker)

对RabbitMQ来说一个Broker阔以作为一个服务节点

大致流程:

Exchange:交换器——生产者将消息交给交换机,交换机将消息路由(分发)到一个或多个队列中。
img

不同的交换机类型,对应RoutingKey与BindingKey不同的匹配规则

RoutingKey:生产者将消息发送给交换机时指定,用来指定这个消息的路由规则,这个RoutingKey要与交换机类型、绑定键(BindingKey)联合使用才能生效

BingingKey:RabbitMQ通过绑定将交换器和队列关联起来,在绑定的时候指定

过程:生产者将消息发送给交换机时带一个RoutingKey,当RoutingKey与BindingKey通过交换器类型对应的规则匹配,将消息路由到对应的队列当中。

在direct里对应的RoutingKey与BingingKey要一致

类比:以direct类型举例,京东有武汉、北京、上海等地方仓库(BingingKey绑定多个地域),小明现在想京东寄一个东西到武汉,京东会匹配下自己有没有武汉这个仓库(精准匹配的过程),如果有,就将小明包裹投递到武汉这个仓库(消息路由到队列中),如果不匹配,则包裹退回或遗弃。

标签:RoutingKey,基础,RabbitMQ,概念,信道,交换机,TCP,消息
From: https://www.cnblogs.com/summerZoo/p/17142219.html

相关文章

  • RabbitMQ消息中间件
    课程简介课程导读:RabbitMQ中间件本课程带你轻松入门,深度掌握RabbitMQ。 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务......
  • 【java 基础】代码在jvm的内存运行流程分析总结
    堆:存储new出来的对象(包括成员变量、数组、方法的地址)栈:正在调用的方法中的局部变量(包括方法的参数)方法区/元空间:.class字节码文件(包括所有方法)publicclassStudentTe......
  • RabbitMQ消息中间件
    课程简介课程导读:RabbitMQ中间件本课程带你轻松入门,深度掌握RabbitMQ。 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务......
  • Qt调用摄像头一,基础版
     本示例,为纯Qt调用摄像头,功能比较简单,打开摄像头,设置参数,拍照涉及到的功能有:获取摄像头列表获取摄像头分辨率获取摄像头帧率获取摄像头支持的视频......
  • ASP.NET Core知识之RabbitMQ组件使用(二)
      近期,业务调整,需要内网读取数据后存入到外网,同时,其他服务器也需要读取数据,于是我又盯上了RabbitMQ。在展开业务代码前,先看下RabbitMQ整体架构,可以看到Exchange和队列是......
  • Flink基本概念及架构
    1、基本概念无界和有界数据。任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一......
  • 为什么使用数据库、数据库的常用概念DB DBMS SQL、常见的数据库排名、Mysql的安装与卸
    为什么使用数据库使用数据库主要原因有两点:为了方便我们长久的存储数据可以很方便的帮我们管理,查询数据库中的数据!可以存储各种各样的数据类型,比如:字符串、数字、文件......
  • 人人都懂Spark-SQL基础操作(Scala版)
    SparkSQL简单的说SparkSQL是spark用来操作结构化和半结构化数据的接口。本文来讲述一下它的一些基本操作。SparkSQL的特性无缝地将SQL查询和spark程序混合,与常规的Python......
  • 通信小白基础学习---5G超级上行 SUL,CA,Uplink Switching
    以下内容来源于B站up主“捻叶成剑”,如有侵权,请联系本人删除!a ......
  • Java零基础自学容易吗?看我们的学习技巧
    Java零基础自学容易吗?难度是不是很大呢?其实市面上还是有不少自学者的,在最开始的时候确实很难,毕竟大家是刚刚接触这个领域,入门时会看到听到很多奇奇怪怪的名词,当时大家的......