RabbitMQ各协议异同详解

Posted lucifer1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ各协议异同详解相关的知识,希望对你有一定的参考价值。

一、官网介绍

Which protocols does RabbitMQ support?

RabbitMQ supports several messaging protocols, directly and through the use of plugins. This page describes the supported protocols and helps differentiate between them.

AMQP 0-9-1, 0-9 and 0-8, and extensions

RabbitMQ was originally developed to support AMQP. As such this protocol is the "core" protocol supported by the broker. All of these variants are fairly similar to each other, with later versions tidying up unclear or unhelpful parts of earlier versions. We have extended AMQP 0-9-1 in various ways.

AMQP 0-9-1 is a binary protocol, and defines quite strong messaging semantics. For clients it‘s a reasonably easy protocol to implement, and as such there are a large number of implementations available for many different programming languages and environments.

If you are just looking to use RabbitMQ, we recommend using AMQP 0-9-1.

STOMP

STOMP is a text-based messaging protocol emphasising (protocol) simplicity. It defines little in the way of messaging semantics, but is easy to implement and very easy to implement partially (it‘s the only protocol that can be used by hand over telnet).

RabbitMQ supports STOMP (all current versions) via a plugin.

MQTT

MQTT is a binary protocol emphasising lightweight publish / subscribe messaging, targetted towards clients in constrained devices. It has well defined messaging semantics for publish / subscribe, but not for other messaging idioms.

RabbitMQ supports MQTT 3.1 via a plugin.

AMQP 1.0

Despite the name, AMQP 1.0 is a radically different protocol from AMQP 0-9-1 / 0-9 / 0-8, sharing essentially nothing at the wire level. AMQP 1.0 imposes far fewer semantic requirements; it is therefore easier to add support for AMQP 1.0 to existing brokers. The protocol is substantially more complex than AMQP 0-9-1, and there are fewer client implementations.

RabbitMQ supports AMQP 1.0 via a plugin.

HTTP

HTTP is of course not a messaging protocol. However, RabbitMQ can transmit messages over HTTP in three ways:

  • The management plugin supports a simple HTTP API to send and receive messages. This is primarily intended for diagnostic purposes but can be used for low volume messaging without reliable delivery.
  • The Web-STOMP plugin supports STOMP messaging to the browser, using WebSockets.
  • The JSON-RPC channel plugin supports AMQP 0-9-1 messaging over JSON-RPC to the browser. Note that since JSON RPC is a synchronous protocol, some parts of AMQP that depend on aysnchronous delivery to the client are emulated by polling.

二、内容译文

RabbitMQ支持哪些协议?
RabbitMQ直接和通过使用插件支持多种消息传递协议。本页介绍了支持的协议,并帮助区分它们。

AMQP 0-9-1,0-9和0-8,以及扩展
RabbitMQ最初是为支持AMQP而开发的。因此,该协议是代理支持的“核心”协议。所有这些变体都非常相似,后来的版本整理了早期版本中不清楚或无用的部分。我们以各种方式扩展了AMQP 0-9-1。

AMQP 0-9-1是一种二进制协议,它定义了非常强大的消息传递语义。对于客户来说,它是一个相当容易实现的协议,因此有许多可用于许多不同编程语言和环境的实现。

如果您只是想使用RabbitMQ,我们建议使用AMQP 0-9-1。

STOMP
STOMP是一种基于文本的消息传递协议,强调(协议)简单性。它对消息传递语义的定义很少,但易于实现并且非常容易部分实现(它是唯一可以通过telnet手动使用的协议)。

RabbitMQ通过插件支持STOMP(所有当前版本)。

MQTT
MQTT是一种二进制协议,强调轻量级发布/订阅消息传递,针对受限设备中的客户端。它有明确定义的发布/订阅消息语义,但不适用于其他消息传递习语。

RabbitMQ通过插件支持MQTT 3.1。

AMQP 1.0
尽管名字相似,但AMQP 1.0与AMQP 0-9-1 / 0-9 / 0-8完全不同,在线路级别基本上没有任何相似之处。 AMQP 1.0强加了很少的语义要求;因此,更容易向现有经纪商添加对AMQP 1.0的支持。该协议比AMQP 0-9-1复杂得多,并且客户端实现较少。

RabbitMQ通过插件支持AMQP 1.0。

HTTP
HTTP当然不是消息传递协议。但是,RabbitMQ可以通过三种方式利用HTTP传输消息:

1、管理插件支持简单的HTTP API来发送和接收消息。这主要用于诊断目的,但可用于无需可靠传送的低容量消息传递。
2、Web-STOMP插件使用WebSockets,支持向浏览器发送STOMP消息。
3、JSON-RPC通道插件支持通过JSON-RPC向浏览器发送AMQP 0-9-1消息。请注意,由于JSON RPC是一种同步协议,AMQP的某些部分依赖于向客户端的同步传递,因此通过轮询进行模拟。

 三、协议介绍

参考链接:http://security.asmag.com.cn/news/201710/92374.html

1、AMQP 协议 (互操作性)   

  AMQP,即 Advanced Message Queuing Protocol, 一个提供统一消息服务的应用层标准高级消息队列协议, 是应用层协议的一个开放标准, 为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端 / 中间件不同产品,不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。   

  AMQP 协议是一个二进制协议,拥有一些现代特点:多信道、协商式、异步、安全、跨平台、中立、高效。  

  AMQP 通常被划分为三层:

  1、模型层定义了一套命令 (按功能分类),客户端应用可以利用这些命令来实现它的业务功能。

  2、会话层负责将命令从客户端应用传递给服务器,再将服务器的应答传递给客户端应用,会话层为这个传递过程提供可靠性、同步机制和错误处理。

  3、传输层提供帧处理、信道复用、错误检测和数据表示。   

  实现者可以将传输层替换成任意传输协议,只要不改变 AMQP 协议中与客户端应用程序相关的功能。实现者还可以使用其他高层协议中的会话层。   

  AMQP 协议最早应用于金融系统之间的交易消息传递,在物联网应用中,主要适用于移动手持设备与后台数据中心的通信和分析。 

 

2、STOMP 协议 

  STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

  STOMP协议的前身是TTMP协议(一个简单的基于文本的协议),专为消息中间件设计。

  STOMP是一个非常简单和容易实现的协议,其设计灵感源自于HTTP的简单性。尽管STOMP协议在服务器端的实现可能有一定的难度,但客户端的实现却很容易。例如,可以使用Telnet登录到任何的STOMP代理,并与STOMP代理进行交互。

  STOMP协议与2012年10月22日发布了最新的STOMP 1.2规范。

 

3、MQTT 协议 (低带宽)   

  MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布 / 订阅 (publish/subscribe) 模式的 “轻量级” 通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。   

  MQTT 协议运行在 TCP/IP 或其他网络协议,提供有序、无损、双向连接。其特点包括:   

  1) 使用的发布 / 订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。  

  2) 对负载内容屏蔽的消息传输机制。   

  3) 对传输消息有三种服务质量 (QoS):   

    最少一次,即:>=1

    最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层 TCP/IP 网络。即:<=1

    只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别   

  4) 数据传输和协议交换的最小化 (协议头部只有 2 字节),以减少网络流量   

  5) 通知机制,异常中断时通知传输双方   

    适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。   

  协议实现方式   

    实现 MQTT 协议需要:客户端和服务器端   

    MQTT 协议中有三种身份:发布者 (Publish)、代理 (Broker)(服务器)、订阅者 (Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。   

    MQTT 传输的消息分为:主题 (Topic) 和负载 (payload) 两部分   

    Topic,可以理解为消息的类型,订阅者订阅 (Subscribe) 后,就会收到该主题的消息内容(payload)   

    payload,可以理解为消息的内容,是指订阅者具体要使用的内容   

    MQTT 协议一般适用于设备数据采集到端 (Device-》Server,Device-》Gateway),集中星型网络架构 (hub-and-spoke),不适用设备与设备之间通信,设备控制能力弱,另外实时性较差,一般都在秒级。

 

4、HTTP协议

  超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

 









以上是关于RabbitMQ各协议异同详解的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ与AMQP协议详解

RabbitMQ使用详解

RabbitMQ简介和六种工作模式详解

RabbitMQ详解

RabbitMQ详解------简介与安装

消息队列RabbitMQ入门与5种模式详解