AMQP和JMS

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