RabbitMQ支持哪些协议呢?
RabbitMQ通过直接支持或插件支持的方式,支持了几种消息协议。
AMQP 0-9-1,0-9,0-8,和扩展协议
RabbitMQ最早开发就是为了支持AMQP,所以该协议是Broker支持的最核心的协议。所有的版本基本上是类似的,但最新的版本描述比较不清晰或相比先前版本没有多大改善。RabbitMQ用不同的方式扩展了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非常少的语法要求;因此将现有的Broker添加上AMQP 1.0的协议支持是非常容易的。实质上这个协议比起AMQP 0-9-1,是非常复杂的,并且它有非常少的客户端实现。
RabbitMQ通过插件机制支持AMQP 1.0。
HTTP
HTTP当然不是一个消息协议。RabbitMQ可以通过以下三种方式来传输消息:
- 管理插件支持一个简单的HTTP API用于发送和接收消息。主要用于测试诊断的目的,但是针对少量的消息来说还是可靠的。
- Web-STOMP插件使得,在浏览器上可使用基于WebSockets、或者SockJS来控制消息。
- JSON-RPC插件使浏览器通过JSON-RPC和基于AMQP 0-9-1协议的消息进行通信。注意JSON RPC是一个同步的协议,基于异步传输的AMQP的一些功能将使用polling方式进行模拟。