当前位置:网站首页>AMQP协议
AMQP协议
2022-06-23 16:43:00 【用户7353950】
开篇
说到消息队列,相信大家并不陌生。大家在日常的工作中其实都有用过。相信大部分的研发在使用消息队列的过程中也仅仅是停留在用上面,里面的知识点掌握得并不是很系统,有部分强大的功能可能由于本身公司的业务形态或者业务量级的原因根本无法触及到。老猫在工作中就是如此,所使用的MQ都是架构师封装好的,简单调用即可。为了更好地了解其所以然,所以老猫就花时间好好梳理了一下MQ的一系列的知识点,俗话说“好记心不如烂笔头”,所以老猫在学习的过程中就记录了下来。分享出来给有需要的小伙伴,当然也方便后续自己查阅,因此就有了该系列文章。
AMQP协议简介
大家在工作中很多就接触过RabbitMq,其实RabbitMq就是AMQP协议的一种实现。
与其说AMQP是一种协议,其实它更是一种标准。是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP是一个进程间传递异步消息的网络协议。全称为AMQP(Advanced Message Queuing Protocol)。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP在消息提供者和客户端的行为进行了强制规定,使得不同卖商之间真正实现了互操作能力。
关于Kafka和AMQP单独补充一个点
相信大家的工作日常中除了用RabbitMQ之外很多小伙伴也用过kafka吧,那么kafka和AMQP有什么关系么?
答案是:没关系。
Kafka根本不是消息队列。按官方说法,Kafka是一个流式处理平台(stream processing platform)。Kafka在设计之初是为了支持高吞吐量的日志处理的,只不过它恰好也可以实现消息队列的大部分功能而已。Kafka所用的“黑科技”(例如零拷贝/内存映射,以及对page cache的利用,当然这些后续分享kafka的时候再和小伙伴同步)都是脱离标准消息队列的设计范畴的,所以不能简单地认为Kafka比RabbitMQ等符合AMQP的消息队列更优。例如,RabbitMQ支持死信队列、延迟队列、优先队列、多租户、推模式消费等,Kafka统统不支持。
AMQP和JMS的区别
说到AMQP协议,就不得不聊JMS。JMS是早期消息中间件进行标准化的一个尝试,它仅仅是在API级进行了规范。只适用于Java平台的消息中间件规范,支持Java应用程序之间进行消息交换。并且通过提供标准的生产、发送、接收消息的接口简化企业应用的开发。如果想要详细了解JMS的小伙伴其实百度百科就有很详细的讲解。具体链接:https://baike.baidu.com/item/JMS/2836691?fr=aladdin, 另外如果有小伙伴想要其具体的接口文档,可以在此进行下载:https://download.oracle.com/otndocs/jcp/7195-jms-1.1-fr-spec-oth-JSpec/
JMS简单概括
JMS主要包括两种模型,(1)点对点模型(2)发布订阅模型
点对点:生产者向队列投递一条消息只有一个监听者才能获取该条消息。
发布订阅:生产者向队列投递一条消息,所有监听该队列的订阅者都可以拿到该消息。
JMS 五种不同的消息正文格式
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
- StreamMessage – Java原始值的数据流
- MapMessage–一套名称-值对
- TextMessage–一个字符串对象
- ObjectMessage–一个序列化的 Java对象
- BytesMessage–一个字节的数据流
AMQP模型概括
AMQP模型如下
- Server:又称Broker,接受客户端的连接,实现AMQP实体服务。
- Connection:连接,应用程序与Broker的网络连接。
- Channel:网络信道。几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
- Message:消息,服务器和应用程序之间传送的数据,由Properties和body组成,Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则是消息主体。
- Virtual host:虚拟地址,由于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue。
- Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列。
- Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing Key。
- Routing Key:一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。
- Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者。
AMQP和JMS对比
上述做了一些简单的概括,如果小伙伴觉得有所欠缺,不是太全,那么可以自行查阅相关资料。
对比方向 | JMS | AMQP |
|---|---|---|
定义 | Java API | 协议 |
跨语言 | 否 | 是 |
跨平台 | 否 | 是 |
对比模型 | ①Peer-2-Peer(点对点);②Pub/sub(发布订阅) | ①direct exchange;②fanout exchange;③topic change;④headers exchange;⑤system exchange。本质来讲,后四种和JMS的pub/sub模型没有太大差别,仅是在路由机制上做了更详细的划分;(这块后续老猫和大家分享rabbitMq的时候会详细说到) |
消息类型 | 支持多种消息类型 ,我们在上面提到过 | byte[](二进制) |
边栏推荐
- ADC digital DGND, analog agnd mystery!
- Stick to five things to get you out of your confusion
- 手机开户股票开户需要多久?在线开户安全么?
- 测试的重要性及目的
- Talk about the difference between redis cache penetration and cache breakdown, and the avalanche effect caused by them
- How to choose an account opening broker? Is it safe to open an account online now?
- ASEMI超快恢复二极管ES1J参数,ES1J封装,ES1J规格
- ABAP随笔-物料主数据界面增强
- Apache基金会正式宣布Apache InLong成为顶级项目
- How do you choose to buy stocks? Good security?
猜你喜欢

TensorRT Paser加载onnx 推理使用

How important is 5g dual card dual access?

Query the size of each table in the database

Importance and purpose of test
![[go] calling Alipay to scan code for payment in a sandbox environment](/img/d4/c6d72a697bc08f69f11121a15109b3.png)
[go] calling Alipay to scan code for payment in a sandbox environment
![[today in history] June 23: Turing's birthday; The birth of the founder of the Internet; Reddit goes online](/img/d5/4b3e622ab77bc546ca5d285ef67d8a.jpg)
[today in history] June 23: Turing's birthday; The birth of the founder of the Internet; Reddit goes online

Counter attack by flour dregs: MySQL 66 question! Suggested collection
![[go]沙盒环境下调用支付宝扫码支付](/img/d4/c6d72a697bc08f69f11121a15109b3.png)
[go]沙盒环境下调用支付宝扫码支付

数学分析_证明_第1章:可数个可数集之并为可数集

NPM install problem solving (NVM installation and use)
随机推荐
Counter attack by flour dregs: MySQL 66 question! Suggested collection
ADC digital DGND, analog agnd mystery!
Asemi ultrafast recovery diode es1j parameters, es1j package, es1j specification
【网络通信 -- WebRTC】WebRTC 源码分析 -- 接收端带宽估计
Date转换为LocalDateTime
供求两端的对接将不再是依靠互联网时代的平台和中心来实现的
JS common error reporting and exception capture
短视频平台开发,点击输入框时自动弹出软键盘
ELK日志收集系统部署
The summary of high concurrency experience under the billion level traffic for many years is written in this book without reservation
元宇宙带来的社会结构和资本制度演变
What is an abstract class? How to define abstract classes?
测试的重要性及目的
Identify and stop the process that's listening on port 8080 or configure this application
Innovative technology leader! Huawei cloud gaussdb won the 2022 authoritative award in the field of cloud native database
ASEMI肖特基二极管和超快恢复二极管在开关电源中的对比
The official Chinese course of zero foundation introduction jetpack compose is coming
电感参数有哪些?怎么选择电感?
How about stock online account opening and account opening process? Is online account opening safe?
How to choose an account opening broker? Is it safe to open an account online now?