JMS和ActiveMQ入门

      JMS 叫做 Java 消息服务(Java Message Service),是 Java 平台上有关面向 MOM 的技术规范, 为Java程序提供了一种创建、发送、接收和读取企业消息系统中消息的通用方法,而ActiveMQ 是众多实现了JMS规范的消息中间件之一。

       消息中间件是在消息的传输过程中保存信息的容器。消息中间件再将消息从它的源中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它为止,当然,消息队列保存消息也是有期限的。

消息中间件的特点

采用异步处理模式

消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或是监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

 应用程序和应用程序调用关系为松耦合关系

主要体现在如下两点:
(1)发送者和接受者不必了解对方、只需要确认消息
(2)发送者和接受者不必同时在线
比如在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里通知订单系统修改订单支付状态。两个系统通过消息中间件解耦。具体请访问:为什么一定要使用消息中间件

JMS消息类型

JMS里面有两个被管理的对象:

ConnectionFactory: 客户端用来创建同JMS提供者之间的连接的对象。

Destination :这个对象是客户端用来指明消息被发送的目的地以及客户端接收消息的来源。

被管理的对象一般被管理员放在JNDI名字空间中,通常在JMS客户端应用的文档中说明它所需要的JMS被管理对象,以及应以何种JNDI名字来提供这些JMS被管理对象。可通过naming.lookup()来获取对象

JMS管理的工作流程

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

JMS提供两种最普遍的消息模式:点对点(P2P)和发布/订阅(Pub/Sub)

点对点(P2P):
        P2P (点对点)消息域使用 queue 作为 Destination,消息可以被同步或异步的发送和接收,每个消息只会给一个 Consumer 传送一次。Consumer 可以使MessageConsumer.receive() 同步地接收消息,也可以通过使用MessageConsumer.setMessageListener() 注册一个 MessageListener 实现异步接收。多个 Consumer 可以注册到同一个 queue 上,但一个消息只能被一个 Consumer 所接收,然后由该 Consumer 来确认消息。并且在这种情况下,Provider 对所有注册的 Consumer 以轮询的方式发送消息。

特点:

(1)每个消息只用一个消费者
(2)发送者和接受者没有时间依赖
(3)接受者确认消息接受和处理成功

发布/订阅(Pub/Sub)

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

发布/订阅模型特点:
(1)每个消息可以有多个订阅者
(2)客户端只有订阅后才能接收到消息
(3)持久订阅和非持久订阅

注意:
(1)发布者和订阅者有时间依赖
接受者和发布者只有建立订阅关系才能收到消息
(2)持久订阅
订阅关系建立后,消息就不会消失,不管订阅者是否都在线
(3)非持久订阅
订阅者为了接受消息,必须一直在线。

当发布/订阅模型只有一个订阅者时约等于点对点模式

图文参考ActiveMQ基础篇消息中间件原理与实现​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章