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 做这些事情。
[解决办法]