-
优点
- 通过异步处理提高系统性能(减少响应所需时间)。
- 削峰/限流
- 降低系统耦合性。
-
缺点:
- 系统可用性降低
- 系统复杂性提高
- 一致性问题
JMS
-
java的消息服务(API是一个消息服务的标准或者说是规范)
-
可以实现异步的消息传输
-
优点
- 使分布式的耦合度更低
- 消息服务更加可靠
- 异步性
-
ActiveMQ实现的基础
-
消息模式
- 点对点(P2P)模型
- Queue作为载体
- 满足生产者和消费者模式
- 一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时
- 发布订阅(Pub/sub)
- 主题(Topic)作为消息通信载体
- 类似于广播模式
- 该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的
- 点对点(P2P)模型
-
消息正文格式(五种)
- StreamMessage – Java原始值的数据流
- MapMessage–一套名称-值对
- TextMessage–一个字符串对象
- ObjectMessage–一个序列化的 Java对象
- BytesMessage–一个字节的数据流
AMQP
-
一个提供统一消息服务的应用层标准 高级消息队列协议(二进制应用层协议)
-
兼容 JM
-
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制
-
是RabbitMQ实现的基础
JMS vs AMQP
对比方向 | JMS | AMQP |
---|---|---|
定义 | Java API | 协议 |
跨语言 | 否 | 是 |
跨平台 | 否 | 是 |
支持消息类型 | 提供两种消息模型:①Peer-2-Peer;②Pub/sub | 提供了五种消息模型:①direct exchange;②fanout exchange;③topic change;④headers exchange;⑤system exchange。本质来讲,后四种和JMS的pub/sub模型没有太大差别,仅是在路由机制上做了更详细的划分; |
支持消息类型 | 支持多种消息类型 ,我们在上面提到过 | byte[](二进制) |