首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 其他服务器 >

mq jms 消息选择器不能生效有关问题

2012-03-30 
mq jms 消息选择器不能生效问题我用如下方式访问MQ,想利用jms的消息选择器,可是setStringProperty后,push

mq jms 消息选择器不能生效问题
我用如下方式访问MQ,想利用jms的消息选择器,可是setStringProperty后,push到MQ中,再pop出该消息,getStringProperty却没有。
我用的MQ6.0,安装在Windows2003 Server中。
代码访问如下所示:
MQQueueConnectionFactory factory= new MQQueueConnectionFactory();
factory.setQueueManager("MYQM");
factory.setCCSID(1381);
factory.setChannel("CHAN1");
factory.setHostName("10.2.4.4");
factory.setPort(1416);
factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
 
QueueConnection connection = factory.createQueueConnection();
 
connection.setExceptionListener(new ExceptionListener(){
public void onException(JMSException arg0)
{
//
}
});
connection.start();
 
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue)session.createQueue("MYQUEUE");
queue.setTargetClient(1);

QueueSender qs = session.createSender(queue);
TextMessage msg = session.createTextMessage();
msg.setStringProperty("MYEKY", "MYVALUE");
msg.setText("test msg");
qs.send(msg);
//采用下面的方式查不出消息
  //QueueReceiver qr = session.createReceiver(queue, "MYKEY='MYVALUE'");
  //采用下面的方式能查出消息,但getStringProperty却为空。
QueueReceiver qr = session.createReceiver(queue);
Message msgRcv= qr.receiveNoWait();
if (msgRcv != null){
  //显示为null
System.out.println(msgRcv.getStringProperty("MYKEY"));
  }

我的需求是能够根据某个关键字的值来获取特定的消息,这样,我只需把所有消息都放到一个队列,消费者根据各自需要取自己的消息。
但不知为何不能实现。
另外,关于jms,setStringProperty设置的自定义属性,不知它是放到哪存储的,既不是消息头,也不是消息体。

希望有用过或了解的大侠,不吝指教。多谢。

[解决办法]
不是汉字的在 MQ 里面直接当成普通消息看也看不出 MYKEY 在哪儿?

格式算是私有的吧。人家 IBM 怎么把 JMS 遇敌成 MQ 的表示可能是 IBM 自家的事情,只要提供的 API 接口是支持 J2EE 标准就行了。标准都只规定接口也不算具体内部怎么表示的。

没用过 JMS 做这些事情。



[解决办法]

探讨

... 人家 IBM 怎么把 JMS 遇敌成 MQ 的表示可能是 IBM 自家的事情...

[解决办法]
自定义属性不能用这个取吧

热点排行