JMS
Java Messasge Service(JMS) 诞生于 2001 年,试图通过提供公共 Java API 的方式,隐藏单独 MQ 产品供应商提供的实际接口,为 Java 应用提供统一的消息操作:create、send、receive。
Element | Notes |
---|---|
JMS provider | 实现了 JMS 接口的消息中间件,如 ActiveMQ、RabbitMQ、Redis |
JMS client | 生产或消费消息的应用 |
JMS producer/publisher | JMS 消息生产者 |
JMS consumer/subscriber | JMS 消息消费者 |
JMS message | 消息,JMS client传输的对象 |
JMS queue | Provider 存放等待被消费的消息的地方 |
JMS topic | 提供多个订阅者消费消息的一种机制 |
JMS 消息模型:
点对点(peer-2-peer)
点对点模型:消息发送到一个队列,该队列的消息只能被一个消费者消费。
发布订阅(publish-subscribe)
发布订阅模型:消息可以被多个消费者消费,生产者消费者完全独立,不需要感知对方的存在。
消息路由:
JMS 中的消息路由是通过 producer 和 consumer 连接到同一个 queue(p2p) 或者 topic(pub/sub) 来实现的。还支持 message selector(消息选择器)来筛选消息。
AMQP
AMQP (Adavanced Message Queuing Protocol)是一种协议,和 JMS 本质的区别是 AMQP 不从 API 层进行限定,而是直接定义网络交换的数据格式,不关心实现的语言。
AMQP 的消息路由增加了交换器(Exchanger)和绑定(Binding)的角色。Producer 将消息发送给 Exchanger,Binding 决定 Exchanger 的消息应该发送到哪个 Queue,而 Consumer 直接从 Queue 中消费消息。Queue 和 Exchanger 的 Binding 是由 Consumer 决定。
五种消息模型:
- direct
- fanout
- topic
- headers