2023-07-06:RabbitMQ中的AMQP是什么?

答案2023-07-06:

AMQP

AMQP(Advanced Message Queuing Protocol)是一个应用层协议的开放标准,旨在设计面向消息的中间件。基于AMQP协议的客户端和消息中间件可以自由地传递消息,不受客户端、中间件产品或开发语言的限制。其目标是实现一种被广泛应用于各行业的标准消息中间件技术,以降低企业和系统集成的成本,并提供工业级的集成服务。RabbitMQ是AMQP协议的一个主要实现。

客户端与RabbitMQ的通讯

连接

作为客户端(生产者或消费者),要与RabbitMQ通信,首先需要建立一条TCP连接。在建立连接后,客户端需要发送一条"问候语",以确保彼此都遵循AMQP协议。这类似于与他人打招呼时说"你好",或者与外国人打招呼时说"hello"。一旦确认了使用相同的"语言",客户端和RabbitMQ就完成了"认证"。然后,它们可以创建一个AMQP信道来进行通信。

信道

信道是生产者和消费者与RabbitMQ进行通信的通道。它是在TCP连接上建立的虚拟连接。这意味着RabbitMQ可以在一条TCP连接上创建多个信道,以便处理多个线程。每个线程对应一个唯一的信道ID,从而保证了信道的私有性,并与特定的线程相关联。

为什么不使用多个TCP连接呢?这是因为通过多路复用技术,RabbitMQ可以在单个TCP连接上支持成百上千的信道。每秒创建和销毁大量的TCP连接对系统性能消耗较大。因此,选择在一条TCP连接上建立多个信道是为了保证性能。

从技术上讲,这被称之为“多路复用”,对于执行多个任务的多线程或者异步应用程序来说,它非常有用。

虚拟主机

虚拟主机(Virtual Host),简称vhost,实质上是一个精简版的消息队列服务器,拥有自己的队列、交换器和绑定,而且最重要的是具备独立的权限机制。虚拟主机能够在逻辑上实现客户端之间的隔离,避免队列和交换器名称的冲突。在连接到RabbitMQ时,必须指定虚拟主机。RabbitMQ默认包含一个名为"/"的虚拟主机,通过默认的用户和密码(guest)进行访问。

在RabbitMQ中创建用户时,必须将其分配给至少一个虚拟主机,并且该用户只能访问其所分配的虚拟主机中的队列、交换器和绑定。虚拟主机的创建需要通过RabbitMQ的管理控制工具进行操作。

交换器类型

交换器类型共有四种:direct、fanout、topic和headers。其中,headers类型与direct类型非常相似且不常使用,可以忽略不计。

Direct

Direct交换器是一种路由键完全匹配的交换器类型,它将消息按照路由键的完全匹配进行投递到相应的队列。Direct交换器是RabbitMQ的默认交换器。当声明一个队列时,它会自动绑定到默认的Direct交换器,并以队列名称作为路由键进行消息的发布:channel->basic_public($msg,’’,’queue-name’)。

Fanout

Fanout交换器将消息广播到所有绑定的队列,不管队列是否绑定了特定的路由键。当消息经过Fanout交换器时,每个队列都会收到一份复制的消息。

Topic

Topic交换器通过使用“”和“#”通配符来处理消息的路由键,从而将来自不同源头的消息投递到同一个队列。在Topic交换器中,路由键可以包含多个标识符,通过使用“.”进行分隔。“”通配符用于匹配一个标识符,而“#”通配符用于匹配一个或多个标识符。

2023-07-06:RabbitMQ中的AMQP是什么?的更多相关文章

  1. 2019.07.06 纪中_B

    今天的题看起来都很简单,结果就爆炸了 做题时:怎么都是图论??? 结果最后好多是DP(最恐怖的是还有我没学过的状压DP) 2019.07.06[NOIP提高组]模拟 B 组 做了两题(稍微腐败了一下) ...

  2. 理解RabbitMQ中的AMQP-0-9-1模型

    前提 之前有个打算在学习RabbitMQ之前,把AMQP详细阅读一次,挑出里面的重点内容.后来找了下RabbitMQ的官方文档,发现了有一篇文档专门介绍了RabbitMQ中实现的AMQP模型部分,于是 ...

  3. 带着新人学springboot的应用06(springboot+RabbitMQ 中)

    上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...

  4. RabbitMQ 中的分布式,普通 cluster 模式的构建

    RabbitMQ 如何做分布式 前言 集群配置方案 cluster 普通模式 镜像模式 federation shovel 节点类型 RAM node Disk node 集群的搭建 1.局域网配置 ...

  5. RabbitMQ中 exchange、route、queue的关系

    从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件    从应用使用的角度全面的介绍如何利用Rabbit MQ构建 ...

  6. RabbitMQ介绍2 - AMQP协议

    这一节介绍RabbitMQ的一些概念,当然也是AMQP协议的概念.官方网站也有详细解释,包括协议的命令: http://www.rabbitmq.com/tutorials/amqp-concepts ...

  7. RabbitMQ中交换机的消息分发机制

    RabbitMQ是一个消息代理,它接受和转发消息,是一个由 Erlang 语言开发的遵循AMQP协议的开源实现.在RabbitMQ中生产者不会将消息直接发送到队列当中,而是将消息直接发送到交换机(ex ...

  8. RabbitMQ中的RPC实现

    1.RPC简述 RPC,Remote Procedure Call 远程过程调用.通俗讲,两段程序不在同一个内存空间,无法直接通过方法名调用,就需要通过网络通信方式调用.对于RabbitMQ,本身就是 ...

  9. 学习RabbitMQ(三):AMQP事务机制

    本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...

  10. RabbitMQ 中 Connection 和 Channel 详解

    我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection. 一旦 TCP 连接建立起来,客户端紧接着可以创建一个 ...

随机推荐

  1. 理解String、StringBuilder和StringBuffer

    1. String.StringBuilder和StringBuffer异同 相同点:底层都是通过char数组实现的 不同点: String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空 ...

  2. 基于Containerd容器引擎和kubeadm工具部署K8sv1.26.3

    前文我了解了基于ubuntu2204部署containerd容器引擎以及containerd客户端工具的部署和使用相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1 ...

  3. 你知道Vue响应式数据原理吗

    1. Vue2的响应式式原理主要是通过Object.defineProperty的方法里面的setter和getter方法的观察者模式来实现.也就是在组件的初始话阶段给每一个data属性都注册一个se ...

  4. 帝国cms将没有搜索到结果的关键字存入到数据库的方法

    在帝国cms网站前台搜索一个关键字,如果在网站中查询到了,这个关键字会被记录入搜索关键字表中,但是如果在网站中没有搜索到,就不会记录入搜索关键字表中,那怎么把没有搜索结果的关键字才能记录到数据库中,方 ...

  5. 如何在现有项目中使用`Masa MiniApi`?

    首先我们现有创建一个空的WebApi的项目模板,这个项目模板和MasaFramework本身没有任何关联,我们本博客只是使用的MasaFramework的MiniApi的包 创建Asp.NET Cor ...

  6. .Net8的快速JIT,分层编译,R2R的设置

    前言 本篇通过一些简单的JIT设置,比如快速JIT,适用于循环的快速 JIT,分层编译,R2R等核心内容设置,快速进入.Net8核心区域. 概括 1.快速JIT 什么是快速JIT,顾名思义,被Rosy ...

  7. CISP_PTE学习

    一.http协议的基础知识(请求方法.状态码.响应头信息.协议的URL) 1.请求方法: (1) http1.0请求包含 head.get.post (2)http1.1请求包含head.get.po ...

  8. Selenium Grid入门详解

    一.简介 Selenium是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器.操作系统和机器上 Selenium Grid主要使用 master-slaves或者hub-no ...

  9. 记一次某CMS代码审计(转载)

    作者:ddwGeGe 本文转自先知社区:https://xz.aliyun.com/t/11774 前言 无意中浏览到某小众OA官网且可以下载到源码,随机审计一波,最后成功Getshell,大佬勿喷 ...

  10. vue全家桶进阶之路18:Vue Router

    Vue Router 是 Vue.js 的官方路由管理器,它可以帮助我们实现单页应用(Single Page Application,SPA)的前端路由. Vue Router 基于 Vue.js 的 ...