初探MQ消息服务(一)

919 阅读2分钟

MOM(面向消息中间件)

用于以分布式应用或系统中的异步、松耦合、可靠、可扩展、安全通信的一类软件。 MOM的总体思想是它作为消息发送方和消息接收方之间的消息中介。这种中介提供了一种全新水平的松耦合方式。

JMS (Java消息服务)

Java平台面向MOM的技术规范。类似于 JDBC 和关系型数据库通信方式的抽象。

消息 产生——>发送——>接收——>处理

image.png

  • Provider:纯 Java 语言编写的 JMS 接口实现(比如 ActiveMQ 就是)
  • Domains:消息传递方式,包括点对点(P2P)、发布/订阅(Pub/Sub)两种
  • Connection factory:客户端使用连接工厂来创建与 JMS provider 的连接
  • Destination:消息被寻址、发送以及接收的对象

消息域

P2P(点对点) 使用 queue 作为 Destination,消息可以被同步或异步的发送和接收,每个消息只会给一个 Consumer 传送一次。

Consumer 可以使用 MessageConsumer.receive() 同步地接收消息,也可以通过使用MessageConsumer.setMessageListener() 注册一个 MessageListener 实现异步接收。

多个 Consumer 可以注册到同一个 queue 上,但一个消息只能被一个 Consumer 所接收,然后由该 Consumer 来确认消息。并且在这种情况下,Provider 对所有注册的 Consumer 以轮询的方式发送消息

image.png

Pub/Sub(发布/订阅) 使用 topic 作为 Destination,发布者向 topic 发送消息,订阅者注册接收来自 topic 的消息。发送到 topic 的任何消息都将自动传递给所有订阅者。接收方式(同步和异步)与 P2P 域相同。 除非显式指定,否则 topic 不会为订阅者保留消息。当然,这可以通过持久化(Durable)订阅来实现消息的保存。这种情况下,当订阅者与 Provider 断开时,Provider 会为它存储消息。当持久化订阅者重新连接时,将会收到所有的断连期间未消费的消息

image.png

步骤

  1. 获取连接工厂
  2. 使用连接工厂创建连接
  3. 启动连接
  4. 从连接创建会话
  5. 获取 Destination
  6. 创建 Producer 、message
  7. 创建 Consumer
    1. 发送或接收message
    2. 注册消息监听器(可选)
  8. 关闭资源(connection, session, producer, consumer 等)