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. 活动预告 | Jax Diffusers 社区冲刺线上分享(还有北京线下活动)

    我们的 Jax Diffuser 社区冲刺活动已经截止报名,全球有 200 多名参赛选手成功组成了约 70 支队伍共同参赛. 为了帮助参赛者更好的完成自己的项目,也为了与更多社区成员们分享扩散模型和生 ...

  2. P4055 [JSOI2009] 游戏(博弈论 、最大匹配)

    P4055 [JSOI2009] 游戏 目录 P4055 [JSOI2009] 游戏 题目传送门 题目大意 : 思路: code 题目传送门 题目大意 : 小AA和小YY玩游戏,在这个游戏中,同一个格 ...

  3. jQuery 在图片和文字中插入内容(多种情况考虑)

    昨天接到一个新的需要,在后台文章编辑器中,每一个文章的正文前面,可以单独添加一个电头字段,但是如果在富文本编辑器中最上面就添加图片的话,图片就会把电头和正文中的文字给隔开.需要做的是获取到电头字段,然 ...

  4. Axure 手机页面拖动效果

    1.设置好上下固定们,中间放一个动态面板,如下图所示,(刚开始创建是没有图片的) 2.再状态1下再创建一个动态面板 命名为D2,如下图所示 3.在D2的状态1下新建一个宽370(大概手机宽)高1100 ...

  5. Nginx Web快速入门

    Nginx Web快速入门 目录 Nginx Web快速入门 Nginx概述 为什么选择Nginx服务 Nginx的应用场景 源码安装nginx Yum安装nginx Nginx相关命令总结 Ngin ...

  6. 【python爬虫】bilibili每周必看页面视频图片爬取

    此博客仅作为交流学习 对于使用bilibili上学习和娱乐的小伙伴们有时会看到视频博主发布的视频封面好看想要得到,但是苦于没有方法,这次我用python来爬取bilibili每周必看页面视频图片. 首 ...

  7. 2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “state“], “values“: [

    2022-11-17:组合两个表.请写出sql语句,执行结果是{"headers": ["first_name", "last_name", ...

  8. 2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

    2022-09-24:以下go语言代码输出什么?A:1:B:3:C:13:D:7. package main import ( "fmt" "io/ioutil" ...

  9. 2022-09-10:以下go语言代码输出什么?A:编译错误;B:49.0;C:49。 package main import ( “fmt“ ) func main() { ch

    2022-09-10:以下go语言代码输出什么?A:编译错误:B:49.0:C:49. package main import ( "fmt" ) func main() { ch ...

  10. 2020-10-17:谈一谈DDD面向领域编程。

    福哥答案2020-10-17:#福大大架构师每日一题# [答案来自此链接](https://www.jianshu.com/p/fb319d7674ff) 一个通用领域驱动设计的架构性解决方案包含4 ...