zoukankan      html  css  js  c++  java
  • activemq in action(3)剖析JMS消息(转)

    对于JMS来说,最重要的就是message.

    Message有三个主要组成部件:标头、主体和属性
     
     
    一、消息标头:
    消息标头是消息的信封,包含为使消息到达目的地所需要的所有信息,可以直接控制其中一些字段的值,其它值则由JMS提供程序填写。
     
    JMSDestination:
    由Send方法设置。指定消息的目的地,由JMS提供程序填写
    JMSDeliveryMode:
             由Send方法设置。提交消息的模式-持续或非持续。发送消息后JMS提供程序填写该字段。
    JMSMessageID:
             Send方法设置。包含消息的唯一标识符。发送过程中由JMS提供程序填写
    JMSTimeStamp:
             Send方法设置。记录消息被传递给send方法的时间。发送过程中由JMS提供程序填写
    JMSCorrelationID:
             由客户端设置。包含用于将消息连接在一起的ID。客户端一般将其置为所引用消息的ID
    JMSReplyTo:
             由客户端设置。响应消息的目的地,如果客户端期望得到响应消息,则填写该字段
    JMSRedelivered:
             由JMS提供程序设置。指出该消息先前被发送过
    JMSType:
             由客户端设置。包含由客户端提供的消息类型标识符。是否需要该字段,不同的提供程序有不同要求
    JMSExpiration:
             Send方法设置。一个根据客户端提供的年龄计算出来的值,如果GMT比该过期值晚,则销毁消息
    JMSPriority:
             Send方法设置。包含客户端在发送消息时所设置有限级值
     
    二、消息属性
    除了上面的属性,还可以自定义属性,以便进行消息的选择
    一般通过setXXXProperty方法来定义消息属性,XXX取值为:Boolean、Byte、Double、Float、Int、Long、Object、Short及String。
    每一属性均由字符串名字和相关的值组成
    TextMessage msg = tsession.createTextMessage();
    msg.setStringProperty(“CUSTOMER_NAME”,”MyCustomer”);
    String customer = msg.getStringProperty(“CUSTOMER_NAME”);
     
    三、消息主体
        包含了消息的核心数据。
        JMS定义了5中消息类型:
        TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage
        选择最合适的消息类型可以使JMS最有效的处理消息。
    1.文本消息TextMessage
    将数据作为简单字符串存放在主体中(XML就可以作为字符串发)
    TextMessage msg = session.createTextMessage();
    msg.setText(text);
    有些厂商支持一种XML专用的消息格式,带来了便利,但是不是标准的JMS类型,影响移植性
    只自己定义了两个方法setText(String s)、getText()
     
    2.映射表消息MapMessage
    使用一张映射表来存放其主体内容
    参照Jms API
    MapMessage msg = session.createMapMessage();
    msg.setString(“CUSTOMER_NAME”,”John”);
    msg.setInt(“CUSTOMER_AGE”,12);
     
    String s = msg.getString(“CUSTOMER_NAME”);
    int age = msg.getInt(“CUSTOMER_AGE”);
     
    3.字节消息 BytesMessage
    将字节流存放在消息主体中。适合于下列情况:必须压缩发送的大量数据、需要与现有消息格式保持一致等
    参照Jms API
    byte[] data;
    BytesMessage msg = session.createBytesMessage();
    msg.wirte(data);
     
    byte[] msgData = new byte[256];
    int bytesRead = msg.readBytes(msgData);
    4.流消息 StreamMessage
    用于处理原语类型。这里也支持属性字段和MapMessage所支持的数据类型。
    使用这种消息格式时,收发双发事先协商好字段的顺序,以保证写读顺序相同
    参照Jms API
    StringMessage msg = session.createStreamMessage();
    msg.writeString(“John”);
    msg.writeInt(12);
     
    String s = msg.readString();
            int age = msg.readInt();
    5.对象消息 ObjectMessage
    用于往消息中写入可序列化的对象。
    消息中可以存放一个对象,如果要存放多个对象,需要建立一个对象集合,然后把这个集合写入消息。
     
    客户端接收到一个ObjectMessage时,是read-only模式。如果一个客户端试图写message,将会抛出MessageNotWriteableException。如果调用了clearBody方法,message既可以读又可以写
    自己只单独定义了两个方法:getObject()和setObject(Serializable s)
    ObjectMessage包含的只是object的一个快照,set之后object的修改对ObjectMessage的body无效
    Message只读时被set抛出MessageNotWriteableException;
    set和get时,如果对象序列化失败抛出MessageFormatException
  • 相关阅读:
    JS判断对象是否为空
    让我感动的一首歌
    获取字符串字节长度跟截取字符串字节长度
    centos7安装mysql
    python 基础
    python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)
    selenium
    adb自动化农药金币
    python 引流
    Python 并行分布式框架 Celery
  • 原文地址:https://www.cnblogs.com/aomi/p/3129843.html
Copyright © 2011-2022 走看看