jms 消息过滤 及消息的组成

一 JMS 消息由以下几部分组成:消息头,属性,消息体。 [4]

l        消息头( header ): JMS 消息头包含了许多字段,它们是消息发送后由 JMS 提供者或消息发送者产 生,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由。

  一般以JMS 开头,如JMSDestination ,JMSMessageID JMSReplyTo

        msg.setJMSMessageID(id);

 大部分消息头是自动分配的,即便使用setJMS... 也会被忽略

JMSReplyTo   JMSCorelationID 用户可自己分配

l        属性( property ):由消息发送者产生,用来添加删除消息头以外的附加信息。

                     名称没有限制,用户可随便定义    

属性分三类 :

  1 应用程序定义的属性(即自定义,程序可以通过它传递信息,比如用到消息过滤中)         

     msg.setStringProperty("property_name", value)

     msg.setDoubleProperty(" property name ", value);  

  2JMS定义的属性

   JMSUserID JMSXAppID JMSXGroupID 等

  这类属性只能用 msg.setStringProperty(" JMSUserID ", value) ,没有相应的set JMSUserID()

3 提供者特定的属性,不同厂商有其特定的属性,

属性一般第一条最常用 ,对一般用户来说

          

l        消息体( body ):由消息发送者产生, JMS 中定义了 5 种消息体: ByteMessage MapMessage ObjectMessage StreamMessage TextMessage

 


二      消息过滤

消息选择器基于sql92 语法

 如   age >10 AND name='abc' 语句则仅符全这个条件的消息才会被接收

 注意这里的age name 必须是jms 消息的 消息头,属性

msg.setStringProperty("name","abc" )

  msg.setIntProperty("age",11 )

这个消息才会被消费 ,

除了自定义的属性如name age 可以用作过滤外,

JMSDeliveryMode JMSPriority JMSMessageId JMSTimestamp JMSCorrelationId JMSType 也可以用作过滤

但jmsdestination jmsreplyto jmsredelivered 不可以,因为前两个对应的值是Destination对象,而者 jmsredelivered 的值不确定,因为谁也不知道 这个消息是不是重发的。

 

1  String 常量用单引号引住如'abc'  ,单引号用两个单引号表示 如‘jack''s ’  表示的是jack's

2比较运算符

     算术运算

     like          (a_c a%c &bc )

    between          

    in               age in (10 ,11,12)

     not             

     is null         (没有相应的name age 属性或消息头,则 is null )

     and or

 

 

 

subSession.createConsumer(destination, messageSelector);

session.createBrowser ();

session.createReceiver();

session.createSuubscriber();


String sql= "age >10 AND name='abc'";

subSession.createConsumer(topic, sql);

 

如果一个消息(及其是队列中的消息,)如果一直没有消费者消费它,会一直存在队列中,

为此可以设置一个消息的到期时间  JMSExpiration 消息头表示到何时过期,

也可以通过 MessageProducer.setTimeToLive(1000); 设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值