02 JMS的消息结构

JMS 消息由消息头、属性、消息体组成。
标准的消息头包含以下属性

1.JMSDestinaction:消息发送的目的地:主要是指queue 和 topic 。如代码中的session.createTopic(“first topic 1”) 和 session.createQueue(“first queue 1”)
2.JMSDeliveryMode:传送模式。有两种:持久模式和非持久模式。一条持久性的消息应该被传送“一次仅仅一次”,这就意味着,如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之后再次传递。一条非永久的消息最多会传递一次,这意味着服务器出现故障,该消息永久消失。
3.JMSExpriration:消息过期时间。等于Destination 的send方法中的timeToLive值加上发送时刻的GMT时间值。如果timeToLive值等于零,则JMSExpriration被设为0,表示消息永不过期。如果发送后,在消息过期时间之后消息还没有发到目的地,则该消息被清楚。
程序中messageProducer.send(message); 就没有设置过期时间,说明只有在消费者消费之后, 才会消失。
4.JMSprority :消息优先级。从0-9十个级别,0-4是普通 消息,5-9是加急消息。必须保证加急消息优先于普通消息到达。默认是4级。
5.JMSReplyTo:提供本消息回复消息的目的地址。
6.JMSRedelivered:重新投递。

消息体:JMS API 定义了5种消息体格式,也叫消息类型,可以用不同形式发送接收数据,并可以兼容现有的消息格式。包括:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage。

消息属性:包含以下三种类型属性
1:应用程序设置和添加的属性,比如:

            TextMessage message = session.createTextMessage("activeMQ 发送的消息"+i);
            message.setStringProperty("username", "zzg");

接收消息的时候, 也可以得到属性

            TextMessage textMessage = (TextMessage)messageConsumer.receive(100000);
            textMessage.getStringProperty("username");

2:JMS定义的属性
使用“JMSX”作为属性的前缀。connection.getMetaData().getJMSXPropertyNames();方法返回所有连接支持的JMSX属性的名字。
3:JMS供应商提供的特定属性。

猜你喜欢

转载自blog.csdn.net/waei08/article/details/79543426