zoukankan      html  css  js  c++  java
  • JSM 基础

    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

    JMS组成和特点

    JMS:JAVA消息服务,两个应用程序之间异步通讯的API。
    
       JMS provider:实现JMS接口和规范的消息中间件,也就是MQ服务器
    
       JMS producer:消息生产者,创建和发送JMS消息的客户端应用
    
       JMS consumer:消息消费者,客户端应用
    
       JMS message:
    
          消息头(MessageProducer.send(传入参数设置)):
    
              JMSDestination:消息发送的目的地(接口),Queue,Topic(实现)
    
              JMSDeliveryMode:持久(一次仅仅一次,服务器故障消息不会丢失)与非持久模式(最多一次)
                  NON_PERSISTENT和PERSISTENT
                  //在消息生产者上设置JMS传送模式
                  TopicPublisher topicPublisher = session.createPublisher(topic);
                  topicPubiisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    
    
              JMSExpiration:设置消息的过期时间(默认0:永不过期),过期后被清除
                  topicPublisher.setTimeToLive(1000);    //1s
    
              JMSPriority:优先级(0-9,默认4级)
                  topicPublisher.setPriority(9);
    
              JMSMessageID:唯一识别的每个消息的标识(由MQ产生)
    
          消息体(Session.createTextMessage(参数)):
              封装具体的消息数据,发送与接受消息的数据类型必须一致
              五种格式:
                  TextMessage:普通字符串 String
                  MapMessage:key(String) value(java基本类型)
                  BytesMessage:二进制数组消息 byte[]
                  StreamMessage:java数据流消息
                  ObjectMessage:对象消息,包含可序列化的java对象
    
          消息属性(发送方:TextMessage.set... / 接收方:TextMessage.get...):
              message.setStringProperty("username",username);    //自定义属性
              识别/去重/重点标注
    

    JMS的可靠性

         PERSISTENT:持久性
             持久:服务器宕机,数据存在(默认)
             非持久:服务器宕机,数据不存在
    
         事务(connection.createSession(false, Session.AUTO_ACKNOWLEDGE);):
             如果是true,开启事务,生产者需要先执行send,再执行commit,消息才会正真提交到队列中
             消费者开启事务,如果事务回滚或者未提交,会再次接收到消息
    
         Acknowledge:签收
             默认自动签收Session.AUTO_ACKNOWLEDGE
             手动签收需要反馈:Message.acknowledge();
             有事务的签收:自动手动一样,但是必须comment
    

    对象模型

    1)连接工厂。连接工厂(ConnectionFactory)创建一个JMS连接。
    
    2)JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接
    
    3)JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。
    
    4)JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。
    
    5)JMS生产者和消费者。生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。
    
    6)JMS消息通常有两种类型:
        ① 点对点(Point-to-Point)。消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
    
        ② 发布/订阅(Publish/Subscribe)。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。
    

    应用程序

    ConnectionFactory 接口(连接工厂)
        用户用来创建到JMS提供者的连接的被管对象。
    
    Connection 接口(连接)
        连接代表了应用程序和消息服务器之间的通信链路。连接允许用户创建会话,以发送和接收队列和主题到目标。
    
    Destination 接口(目标)
        目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。
    
    Session 接口(会话)
        表示一个单线程的上下文,用于发送和接收消息。
        如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。
    
    MessageProducer 接口(消息生产者)
        由会话创建的对象,用于发送消息到目标。
        用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。
    
    MessageConsumer 接口(消息消费者)
        由会话创建的对象,用于接收发送到目标的消息。
        消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。
    
    
    Message 接口(消息)
        是在消费者和生产者之间传送的对象,一个消息有三个主要部分:
            消息头(必须):包含用于识别和为消息寻找路由的操作设置。
            一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。
            一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
    

  • 相关阅读:
    09.Java数据算法
    08.Java反射问题
    07.Java类加载问题
    占位
    占位
    占位
    占位
    HTML与CSS粗浅摘要
    JavaScript(4):模态对话框、隐藏二级菜单及多选框的实现
    JavaScript(3):DOM选择器
  • 原文地址:https://www.cnblogs.com/loveer/p/11405564.html
Copyright © 2011-2022 走看看