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

randy_ideal 2011-03-08 09:41:52
我用如下方式访问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设置的自定义属性,不知它是放到哪存储的,既不是消息头,也不是消息体。

希望有用过或了解的大侠,不吝指教。多谢。
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaghost 2011-04-25
  • 打赏
  • 举报
回复
自定义属性不能用这个取吧
randy_ideal 2011-03-09
  • 打赏
  • 举报
回复
没有汉字,全是英文字母,直接枚举getPropertyNames(),也只有系统自带的一些属性,没有MYKEY。
用MQ资源管理器查看一个消息的各项属性时,都只会列出一些系统固有的属性,自定义的属性没有地方显示,所以不知道自定义属性被存储在哪
humanity 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 humanity 的回复:]

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

纠正, 遇敌->映射. 遇敌怎么是个词而映射却不是,万能五笔都不把映射列在重码列表里面,怪异。
humanity 2011-03-08
  • 打赏
  • 举报
回复
不是汉字的在 MQ 里面直接当成普通消息看也看不出 MYKEY 在哪儿?

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

没用过 JMS 做这些事情。


2,633

社区成员

发帖
与我相关
我的任务
社区描述
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
社区管理员
  • WebSphere社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧