当前位置:网站首页>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[](二进制) |
边栏推荐
- Is it cost-effective to buy a long-term financial product?
- NPM install problem solving (NVM installation and use)
- Here comes the official zero foundation introduction jetpack compose Chinese course!
- How can the points mall make profits
- Taishan Office Technology Lecture: four cases of using Italic Font
- Tupu digital twin 3D wind farm, offshore wind power of smart wind power
- DataNode进入Stale状态问题排查
- Get first and last days by year
- [go] calling Alipay to scan code for payment in a sandbox environment
- Network remote access raspberry pie (VNC viewer)
猜你喜欢

Jetpack Compose 与 Material You 常见问题解答

混沌工程在云原生中间件稳定性治理中的实践分享

What can the accelerated implementation of digital economy bring to SMEs?

Tupu digital twin 3D wind farm, offshore wind power of smart wind power

时间戳90K是什么意思?

亚朵更新招股书:继续推进纳斯达克上市,已提前“套现”2060万元

网络远程访问树莓派(VNC Viewer)

Robot Orientation and some misunderstandings in major selection in college entrance examination

DataNode进入Stale状态问题排查

Importance and purpose of test
随机推荐
[network communication -- webrtc] source code analysis of webrtc -- bandwidth estimation at the receiving end
Date转换为LocalDateTime
Focus: zk-snark Technology
Short video platform development, click the input box to automatically pop up the soft keyboard
hands-on-data-analysis 第二单元 第四节数据可视化
Date to localdatetime
C # connection to database
图扑软件数字孪生挖掘机实现远程操控
Can the asemi fast recovery diodes RS1M, us1m and US1G be replaced with each other
The summary of high concurrency experience under the billion level traffic for many years is written in this book without reservation
时间戳90K是什么意思?
官方零基础入门 Jetpack Compose 的中文课程来啦
The company recruited a tester with five years' experience and saw the real test ceiling
根据年份获取第一天和最后一天
What does the timestamp 90K mean?
Practice sharing of chaos engineering in stability management of cloud native Middleware
Three minutes to learn how to retrieve the MySQL password
Opengauss database source code analysis series articles -- detailed explanation of dense equivalent query technology (Part 1)
出现Identify and stop the process that‘s listening on port 8080 or configure this application等解决方法
ABAP随笔-程序优化笔记