RabbitMQ 简介

news2024/11/14 21:47:55

RabbitMQ 简介

首先我们先看一下常见的MQ产品

在这里插入图片描述

在上图我们可以知道RabbitMQ和ActiveMQ都支持AMQP协议,那么什么时AMQP呢?

AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议
的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中
间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HT

在AMQP中规定了如下的几个角色:

在这里插入图片描述

执行流程:由Publisher(生产者)发布消息到Exchange(交换机),交换机通过路由到队列(Queue)中存储,Consumer(消费者)从对应的消息进行消费;

RabbitMQ出现:

2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。
Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

在这里插入图片描述

RabbitMQ 中的相关概念:

⚫ Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker
⚫ Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网
络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多
个vhost,每个用户在自己的 vhost 创建 exchange/queue 等
⚫ Connection:publisher/consumer 和 broker 之间的 TCP 连接
⚫ Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection
的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线
程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和
message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection
极大减少了操作系统建立 TCP connection 的开销

⚫ Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到
queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
⚫ Queue:消息最终被送到这里等待 consumer 取走
⚫ Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存
到 exchange 中的查询表中,用于 message 的分发依据

RabbitMQ的工作模式:

RabbitMQ 提供了 6 种工作模式:简单模式、work queues、Publish/Subscribe 发布与订阅模式、Routing
路由模式、Topics 主题模式、RPC 远程调用模式
在这里插入图片描述

JMS

⚫JMS 即 Java 消息服务(JavaMessage Service)应用程序接口,是一个 Java 平台中关于面向消息中间件
的API
⚫JMS 是 JavaEE 规范中的一种,类比JDBC
⚫很多消息中间件都实现了JMS规范,例如:ActiveMQ。RabbitMQ 官方没有提供 JMS 的实现包,但是开
源社区有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android启动以及 app 启动流程 笔记

Android 启动流程 init 进程是 用户控件鼻祖 zygote 进程是 java进程鼻祖 zygote进程的操作 1.native 层 做的操作 1.初始化java运行环境 虚拟机 (内存管理) 2.注册jni 3.运行 zygoteinit.main方法 进入java 2.java …

Serverless Devs 社区联合信通院邀请您参加 2022 中国 Serverless 用户调查

作者:云原生产业联盟 在创新发展需求的不断驱动下,用户关注点逐步上移,敏捷成为破局高频竞争的利器。以应用为中心、屏蔽底层复杂逻辑,灵活扩展,按需取用的服务器无感知(Serverless)技术符合云…

【GUI视频教程】GUI综合实战视频教程第3期:GUIX Studio一条龙设计主界面,底栏和窗口切换控制(2022-11-21)

视频教程汇总帖:【学以致用,授人以渔】2022视频教程汇总,DSP第10期,ThreadX第5期,BSP驱动第24期,USB实战第4期,GUI实战第3期(2022-11-21) - STM32F429 - 硬汉嵌入式论坛 …

Dubbo 服务注册与启动源码解析

Dubbo 版本&#xff1a;3.1.2 自定义标签解析 在 DubboNamespaceHandler 中会添加 DubboDeployApplicationListener&#xff0c;其继承了 ApplicationListener<ApplicationContextEvent> 关于ApplicationListener&#xff0c;可参考&#xff1a;Spring 事件基本使用 服…

YoloV5+TensorRT封装|C#调用dll实现V5+TRT目标检测

在目标检测得领域中&#xff0c;yolo系列无疑是最强得目标检测框架&#xff0c;而其中得yolov5更是扛把子得存在&#xff0c;虽然有着众多的yolo系列版本&#xff0c;但是在工业领域中yolov5还是用的最多&#xff0c;yolov5 yyds&#xff0c;&#xff0c;&#xff0c;先奉献上我…

上海亚商投顾:沪指高开低走 钠离子电池、储能概念崛起

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日高开低走&#xff0c;收盘均小幅下跌&#xff0c;以中字头为首的权重股走弱&#xff0c;上证50跌超0.…

SpringBoot中如果字段为空就不返回给前端

SpringBoot中如果字段为空就不返回给前端前言测试参数的执行结果JsonInclude.Include.ALWAYSJsonInclude.Include.NON_NULLJsonInclude.Include.NON_ABSENTJsonInclude.Include.NON_EMPTYJsonInclude.Include.NON_DEFAULTJsonInclude.Include.USE_DEFAULTSJsonInclude.Include.…

2.(vue3.x+vite)使用vue-router

前端技术社区总目录(订阅之前请先查看该博客) 前端技术社区:vue3.x+vite,node篇,前端小技术,前端资料篇等相关内容的介绍 1:安装vue-router npm i vue-router 2:创建router文件 在src的目录下创建router文件夹与index.js文件 index.js文件内容如下: import {cr…

C#学习以及感受

我本来是写Java的,但是这边的代码用的是.NetCore框架 就自学了 但是学下来,发现其实这两者并没有什么本质区别 Java导包用import而c#用using Java与c#都是写一个静态的main方法来启动,c#的Main必须大写 Java和c#的数据类型基本一样,c#中的string的s可以小写,c#的布尔类型是bool…

Landsat Collection 2 T1一级数据详细介绍(数据处理过程和几何精度)

几项数据处理、几何和辐射改进&#xff0c;以及新的数据分发过程&#xff0c;定义了 Collection 2 Level-1 数据。此页面提供了有关用户可以在 Landsat Collection 2 Level-1 数据中找到的更改的详细信息。请参阅本页下方列出的特定于仪器的数据格式控制手册&#xff0c;以更全…

Redis基础命令(List类型)双链表

目录 概述&#xff1a; 特征&#xff1a;&#xff08;与LinkedList类似&#xff09; List常见命令 1.Lpush key element.....&#xff1a;向列表左侧插入一个或多个元素 2.LPOP key &#xff1a;移除并返回列表左侧的第一个元素&#xff0c;没有则返回nil 3.RPUSH key ele…

【allegro 17.4软件操作保姆级教程四】布线前准备之叠层和阻抗设计

通常在设计中&#xff0c;如果我们有控制阻抗的要求&#xff0c;一般会在加工工艺文档里进行说明&#xff0c;板厂拿到文档和相关工程文件后&#xff0c;会进行工程评估确认&#xff0c;会根据板厂的实际情况进行叠层和线宽的调整&#xff0c;所以这里只是进行简单分析&#xf…

sqli-labs/Less-59

这一关又只有五次机会 而且仍然是以id作为注入点 我们尽量再前一轮完成注入类型的判断 在后一轮完成各种爆破操作 首先先判断注入类型是否属于数字型注入 输入id1 and 12 回显如下 没有回显 说明后续操作不能使用报错注入解决问题 并且肯定是属于数字型注入 倒是有无修饰符不懂…

【javaEE】网络原理(数据链路层+小结)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言一、数据链路层1. 以太网2. 认识MTU&#xff08;没时间可以跳过&#xff09;3. 认识ARP&#xff08;没时间就跳过&#xff09;二、 【网络原理小结】&#xff08;含面试题&#xff09;THINK前言 一个人最大的痛…

搭建vue3.2+vite+ts+pinia项目

用到的技术 vue3.2vitetspinia 搭建项目 前言 vue3vite 会比vue2webpack的速度快很多&#xff1b;Vite 是一个轻量级的、速度极快的构建工具&#xff1b; vite官网 创建项目 npm create vitelatest报错了&#xff1a; 初始化失败 npm ERR! Could not install from “File…

【C语言】单词拼写检查

《算法集训传送门》 &#x1f449;引言 铭记于心&#x1f389;✨&#x1f389;我唯一知道的&#xff0c;便是我一无所知&#x1f389;✨&#x1f389;&#x1f496; ❄️我们的算法之路❄️&#x1f496;众所周知&#xff0c;作为一名合格的程序员&#xff0c;算法 能力 是不可…

基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息

目前飞书社交办公应用成为公司日常沟通办公的协作工具&#xff0c;以及作为各种流程的审批处理系统&#xff0c;HR 也会在飞书上去管理所有员工的状态及组织架构。 随着公司内新部署的业务系统越来越多&#xff0c;例如Jenkins、JIRA、Gitlab、Confluence、禅道等&#xff0c;有…

门店数字化转型| 美发店智慧管理系统

颜值经济时代及他经济崛起&#xff0c;人们更注重自身形象&#xff0c;且追求方便快捷体验好的服务&#xff0c;而且她们越来越理智&#xff0c;不再盲目跟风&#xff0c;关注自身感受&#xff0c;追求便利个性化服务。 美容美发市场规模大但整体线上化程度偏低&#xff0c;下沉…

计算机网络复习——第六章网络层

hhhhh 还是今天的我&#xff0c;今天把这两个肝了&#xff0c;准备27考试&#xff0c;耶耶耶&#xff01;&#xff01;&#xff01;小h加油&#xff01; 《计算机网络》&#xff08;谢希仁&#xff09;内容总结 (javaguide.cn) 重点知识&#xff1a; 域名系统&#xff08;DN…

gptp报文完成时间同步原理

gptp(generalized Precision Time Protocol&#xff0c;广义精确时间同步协议),能够完成微秒级的时间信息同步 gptp定义了两种类型的设备 每一种设备都有自己的本地时钟&#xff0c;设备中用来发布同步时间报文的网络端口被称为主端口&#xff0c;用来接收时间同步报文的被称…