协议很常见,只要是通信,就会用到协议,就像我们说话的语言一样,不同的语言连通着不同的人群。
所以说,消息队列也是一样,想要互相通信,就要使用同一种协议。
每个协议下的消息队列,都有着不同的角色定义。
简单说下常见的消息队列协议:

1.AMQP(Advance Message Queuing Protocol)

Message(消息):消息服务器处理消息的原子单元,包括一个内容头,一组属性和一个内容体。
消息有优先级,高优先级的消息在等待同一消息队列时会比低优先级的消息先发送,而且当消息必须被丢弃时,低优先级的消息优先被丢弃。
使用AMQP协议,消息服务器不能修改内容体和内容头,但可以在内容头上添加额外信息。
PubLisher(消息生产者):发送消息
Consumer(消息消费者):消费消息
Broker(消息代理):消息队列服务器,负责接收客户端连接,路由消息。
Queue(消息队列):Broker中的一个角色,一个Broker中可以有多个Queue,负责保存消息直到发送给不同的消费者。算是消息的容器。一个消息可以被投入一个或多个队列中,每个队列的消息都会等待消费者连接到这个队列并被取走。
Exchange(交换路由):Broker中的一个角色,负责接收生产者发送的消息,并路由给服务器中的队列。可以被理解成一个规则表,指明消息该被投到哪个队列中。
Channel(信道):信道是一条独立的双向数据流通道。为了解决操作系统无法承受每秒建立特别多的TCP连接。

生产者发送消息时,必须指定消息要被路由到哪些个消息队列中。
当消息到消息队列中,消息队列会尝试将消息传给消费者,如果失败,消息队列会存储消息并等待消费者。
如果没有消费者,消息队列将选择性的将消息返回给生产者。
如果消息别消费掉,消息队列会删除消息,删除的过程或者是及时的,或者是等到消费者消费结果后才删除的。

AMQP是二进制协议。

2.MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)

由IBM开发,现在被广泛用于物联网公司。因为他的特点就是轻量,简单,开放和易于实现。所以他常用于很多计算能力有限、带宽低、网络不可靠的远程通信应用场景。
Publisher(发布者):消息发布客户端
Subscriber(订阅者):消息订阅客户端
Broker(消息代理):消息服务器端
Application Message(应用消息):指通过网络传输的应用数据,一般包括主题和负载。
Topic(主题):应用消息的类型,一般消息发布者会确定消息的主题,订阅者根据自己实际情况选择不同的主题进行消息订阅消费。
Payload(负载):消息订阅者具体接收的内容。

MQTT协议是通过交换预定义的MQTT控制报文来通信的。
控制报文内容由三部分组成:固定报头,可变报头和消息体。
固定报头通过标识不同位的值来确定报文类型,包括发布订阅的一些完成状态等。
可变报头的内容根据控制报文类型不同而不同,常作为包的标识符。
消息体也是根据不同的消息类型有着不同的内容。

MQTT协议中,客户端和服务端是通过请求应答模式通信的。客户端发送一条控制报文数据给服务器,服务器再发送一条控制报文数据给客户端。

MQTT在发布消息时,有三种Qos等级:至多一次(0级),至少一次(1级),只有一次(2级)。
至多一次等级最低,客户端只需要将消息发出去即可,这种等级很low,用于消息不重要但特别多,为了减轻通信压力,就不顾质量,只看数量了。
至少一次等级中等,客户端要保证发出去的消息至少一次被服务端接收到,所以要收到服务端的回应,否则一直发,这种等级一般用于服务端有幂等处理,所以不怕重复消费,还要保证消息不会丢失。
只有一次等级最高,客户端先发消息过去,然后本地记录一个我已发送,但不确定你是否收到的状态,然后服务端接收到消息后,回给客户端一个我已接收的报文,同时服务端记录一个我不确定你知不知道我已接收的状态,然后客户端收到这个已接收的消息后,就确定服务端收到这个消息了,于是把自己本地记录的已发送未确定的状态删除,同时再给客户端发送一个我已经知道你收到的报文,服务端收到这个报文,也会把自己之前记录的状态删掉,整个一条报文只有一次的通信才算完成,这种等级就比较严格了,但质量上去了,相对低等级的,数量就会相对小些,但可靠就是王道,不多不少才是最好的。
只有一次的发送和确定,其实思想和三次握手差不多,都是两端互相确认的过程,所以会一来一回的。如果传输过程中出现丢包,都会由发送者重发上一条消息。

3.STOMP(Streaming Text Orientated Messaging Protocal,流文本定向消息协议)

STOMP是一个相对简单的文本消息传输协议,主要特点就是简单易懂,没有特别多的套路。
客户端:既可以是生产者,也可以是消费者
服务端:消息中心

4.XMPP(可扩展通信与表达协议)

基于XML的流式即时通信协议。
由于用的XML,所以通用性更强。
客户端:生产者,消费者
服务端:消息中心
XMPP的理念是尽可能的简化客户端,复杂的都放在服务端。

5.JMS(Java Message Service,java消息服务应用程序接口)

java消息服务应用接口,是一套java API接口。
JMS是规范,是对AMQP,MQTT,STOMP,XMPP等协议更高一层的抽象。

消息队列(2):常见的消息队列协议相关推荐

  1. Kafka是什么,JMS是什么,常见的类JMS消息服务器,为什么需要消息队列(来自学习笔记)

    1.Kafka是什么  Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目.  Kafka最初是由LinkedIn开发,并于2011 ...

  2. 浅谈消息队列及常见的分布式消息队列中间件

    背景 分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息.所以消息队列主要解决应用耦合.异步消 ...

  3. 消息队列及常见消息队列介绍

    转载 消息队列及常见消息队列介绍 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要 ...

  4. python消息队列中间件_常见的消息队列中间件介绍

    题目 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 什么是消息队列 在正式介绍和对比Kafka. ...

  5. 消息队列及常见消息中间件

    可以直接去看原文:浅谈消息队列及常见的消息中间件 简介 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段.它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多的 ...

  6. MQ消息队列的JMS规范和AMQP协议的区别

    详细介绍了JMS规范和AMQP协议的内容与区别. 文章目录 1 JMS 1.1 JMS消息模型 2 AMQP 2.1 AMQP消息模型 3 对比 1 JMS JMS(JAVA Message Serv ...

  7. MQ消息队列的常见用法

    消息队列MQ是分布式中重要的组件 目前常见的消息队列有三种:ActiveMQ,RabbitMQ,Kafka 今天我想来梳理一下MQ消息队列的具体常见用法: 1.异步处理 用户注册之后,需要发短信和加积 ...

  8. 消息队列-简单介绍Java消息队列,什么是消息队列,作用以及常见消息队列

    天天说队列, 项目请求数据不能及时处理时,就一言不合通过队列啊, 心中那个是妈卖批,那么到底什么队列呢,队列有到底运用于哪些运用场景呢; 先说说应用场景吧, 不知道有啥作用,看多了含义,原理什么的还是 ...

  9. 用户请求队列化_分布式消息队列选型分析

    高并发架构是成为架构师的必修课,而消息队列,则是王冠上最闪亮的那颗明珠!能否驾驭消息队列这款高并发神器,亦成为架构师的试金石.本文将从队列本质.技术选型两个方面,给大家整理下个人心得,希望能对大家有所 ...

最新文章

  1. Login failed for user 'NT AUTHORITY\SYSTEM'. 原因: 无法打开明确指定的数据库。异常处理...
  2. 09_Redis持久化——AOF方式
  3. 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格
  4. 【免费下载】“后红海”时代,独家揭秘当下大数据体系
  5. 我对XCode Objective-c Cocoa的简单理解
  6. 软件工程复习笔记 UML
  7. P1144 最短路计数
  8. 不清楚SBUS,这份SBUS协议详解请收藏
  9. GIS应用开发AO(1)_普通几何图形绘制
  10. JDK及Eclipse下载安装教程
  11. 玻利亚(Polya)的《怎样解题》
  12. 如何将 txt 文本文件保存为 html 文件
  13. 目标检测(Object Detection)
  14. 图片复印如何去除黑底_如何去除扫描件的底色? 扫描的图片去除背面的阴影的方法...
  15. 简单系统U盘制作 / 安装系统
  16. 什么是飞书机器人?如何定时发送飞书机器人消息?
  17. 合天网安实验室CTF-Web100-Give Me Flag
  18. 美团赴抖音之“约”:让本地生活补贴大战来得更猛烈些?
  19. 基于snipe-it v5.1.2开源资产管理软件二次开发安卓端管理app
  20. AdGuard更多规则推荐

热门文章

  1. leetcode-187-重复的DNA序列
  2. 034 Android NavigationView和DrawerLayout实现抽屉式导航设计(侧边栏效果)
  3. 今天pycharm不能正常使用了
  4. StringBuilder String string.Concat 字符串拼接速度再议
  5. 点击Cell中的按钮时,如何取所在的Cell
  6. ubuntu zip解压
  7. string.Format格式化输出
  8. photoshop问题
  9. Eclipse下如何导入jar包
  10. 用busybox制作并配置根文件系统