消息协议是用于实现消息队列功能时所涉及的协议。常见的开放协议有AMQP/MQTT/STOMP/XMPP
下面主要介绍的是每种协议的基本概念以及通信的消息数据格式。
1、AMQP
publisher产生一条数据,发送到broker,broker中的exchanger可以被理解为一个规则表,收到消息后根据规则查询投递的目标queue。consumer向broker发送订阅消息时会指定自己监听哪个queue。
2、MQTT
是IBM开发的一个即时通讯协议。该协议支持所有平台,几乎可以把所有互联网物品和外部连接起来。
一条消息的流转过程是这样的,先由消息发布者发布消息到代理服务器,在消息中会包含主题topic,消息订阅者如果订阅了该主题的消息,就会收到代理服务器推送的消息。
在MQTT协议中,使用者有三种身份,发布者、代理和订阅者。该协议中涉及的客户端和服务器的通信场景,可分为建立连接,发布消息,主题订阅,心跳检测和断开连接。
3、STOMP
是一个简单的文本消息传输协议。该协议同样包含客户端和服务器,这里的客户端既可以是消息生产者也可以是消费者,而服务器是指消息数据的目的地,所有消息都会被发送到服务器。
4、XMPP
是一种基于XML的流式即时通信协议。它的特点是将上下文等信息嵌入到用xml表示的结构化数据中,使得人与人之间,人与应用系统之间以及应用系统之间能及时相互通信。
JMS
是Java平台面向消息中间件的一套规范的API接口,用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。
大部分消息队列产品都支持点对点
和发布-订阅
两种方式来传递消息。
1、点对点
在点对点模型中,应用程序由队列、发送者和接收者
组成。每条消息都被发送到一个特定的队列中,接收者从队列中获取消息,队列中一直保留着消息,直到他们被接收或超时。
特点
- 每条消息只有一个接收者
- 发送者和接收者之间,在时间上没有依赖
- 当接收者收到消息时,会发送确认收到通知
所以一般情况下,如果希望所发送的每条消息都能被成功处理,则需要使用点对点模型。
2、发布-订阅
在发布-订阅模型中,应用程序由主题、发布者和订阅者
组成。主题用于保存和传递消息,并且一直保存消息,直到消息被传递给订阅者。
特点
- 每条消息可以有多个订阅者
- 发布者和订阅者之间有时间上的依赖,必须先订阅topic,否则接收不到消息
- 每条消息都会传送给该主题下的所有订阅者。
所以,如果希望所发送的消息不被做任何处理或者被一个或多个订阅者处理,都可以使用发布订阅模型。JMS规范实际上是对各种消息通信协议更高一层的抽象。