• JMS基本概念


    JMS概念

      JMS(Java Message Service)为Java消息服务规范,是一个面向Java平台的消息中间件异步通信服务模型,用于在两个应用程序之间进行通信,或者在分布式系统中发送消息,包括消息的创建、发送和读取等。JMS是一个与平台无关的API,绝大多数中间件(MOM)提供商均提供对JMS的支持。通过JMS消息服务平台,当两个应用系统需要进行消息通信时,他们并不是直接相连的,而是通过一个共同的消息收发服务系统连接起来,这样就可以达到了系统间解耦的目的。

      JMS有两种消息传输模式:Point-to-Point(P2P)模型和Publish-Subscribe模型(点对点模型和发布订阅模型)。

    点对点(P2P)消息模型

      点对点消息模型组成元素包括:消息生产者(Provider)、消息消费者(Consumer)和消息队列(Queue)组成。每一个消息由消息生产者发送给一个特定的消息队列,不同的消息队列具有不同的名称,这个消息队列又被称为消息发送的目的地(Destination),该队列将会保存所有发给他的消息。消息消费者通过设置消息获取源(即从哪一个消息队列中获取消息)从相应的队列中读取消息,这个获取源即时前面所提的目的地(Destination)。

      在点对点消息模型中,每一个消息只能被一个消费者消费,当队列中的某一个消息被消费者消费后,该消息立即会被消息服务系统从消息队列中删除。

      消息队列中的消息时按照FIFO模型进行存储和消费的,消息具有顺序性,消费者只能按照时间先后顺序消费消息,不能选择消费某一条消息。

      点对点消息模型具有以下特征:

    • 每个消息只有一个接受者
    • 消息发送者和消息接受者并没有时间依赖性
    • 当接受者收到消息的时候,会发送确认收到消息通知(acknowledgement)

     

    发布/订阅模型(Publish-SubScribe)

      发布/订阅模型组成元素也由三个:消息发布者(Publisher)、消息订阅者(Subscriber)和消息主题(Topic)。在该模型中,发布者将消息发送给一个特定的消息存储目的地(Destination),该目的地在发布/订阅模型中被称作Topic,然后订阅者从该Topic中获取相应的消息。与P2P不同的是,在发送/订阅模型中,一条消息可以被多个订阅者订阅。当一条消息被一个订阅者消费后并不会马上被消息服务系统删除,而是继续存储在Topic中,直到一定的时间后才会被删除。在发布/订阅模式中,当存储消息的文件达到一定的大小时,消息也会被删除。

      发布/订阅模型具有以下特征:

    • 每个消息可以被多个订阅者订阅
    • 发布者和订阅者有时间依赖性,只有当客户端创建订阅后才能接受消息,且订阅者需一直保持活动状态以接收消息

    两种接受消息的方式

      在JMS中有两种方式供消费者(订阅者)接受消息:

    • 主动接受消息:消费者或者消息订阅者通过receive()方法获取消息。使用receive()方法时,消息为到达队列或Topic时,方法会阻塞,直到队列或者Topic中有消息可用。
    • 被动接受消息:消费者或者消息订阅者需要注册一个消息监听者MessageListener(),只要Destination中存在消息,JMS服务器会通过调用MessageListener()中的onMessage()方法向消费者或者订阅者传送消息。

    JMS消息种类

      JMS定义了五种不同的消息正文格式,允许客户发送和接受一些不同形式的数据。五种消息类型分别是:

    1. StreamMessage : Java原始数据流
    2. MapMessage : 键值对(key-value)
    3. TextMessage : 字符串对象
    4. ObjectMessage : 一个序列化的Java对象
    5. BytesMessage :字节数据流

    JMS编程接口

      基于JMS消息服务系统的编程模型主要包括以下几个元素:

    • 连接工厂 :ConnectionFactory。客户端通过ConnectionFactory对象连接到JMS服务器,使用该连接,客户端可以与特定的JMS服务器通信。
    • 消息存储目的地 :Destination。目的地为消息被发送的地址或者客户端接受消息的来源,JMS提供两种Destination,Queue and Topic,每一个Destination均有一个唯一的名称。
    • 连接对象 :Connection。连接对象封装了了客户端与JMS服务器之间的虚拟连接,由ConnectionFactory创建,在程序结束后使用connection.close()方法关闭连接。
    • 会话 :Session。Session是一个单线程上下文,用于产生生产者和消费者(或者发布者和订阅者)和消息。
    • 消息生产者 : MessageProducer。消息生产者由Session创建,用于向特定的Destination发送Message。
    • 消息消费者 : MessageConsumer。消费者由Session创建,用于从特定的Destination接收Message。
    • 消息监听者 :MessageListener。MessageListener用于监听Destination中是否存在消息,当Destination中存在消息时,JMS会通过客户端注册的MessageListener对象中的onMessage()方法通知客户端。消费者通过setMessageListener()方法向JMS服务器注册消息监听者。

      这几个元素之间的关系如下图所示:

     参考文献

      JMS(Java消息服务)入门教程

  • 相关阅读:
    解决多并发
    一个交换机到底能带几台摄像头?结合生产经验咱们来分析!
    ELK查询命令详解
    Ansible自动化部署入门到进阶笔记
    批量SSH key-gen无密码登陆认证脚本
    ELK查询命令详解总结
    Shell 正则表达式详解
    Linux 常用系统性能命令总结
    什么叫做消息队列呢?
    批量SSH key-gen无密码登陆认证脚本 附件脚本
  • 原文地址:https://www.cnblogs.com/jxwch/p/6489887.html
Copyright © 2020-2023  润新知