如何使用JavaAPI设置消息选择器?
我试图编写一个简单的测试用例,根据消息属性从队列中提取消息,使用7.5.0.3 QMgr和7.5.0.3客户机JAR 我在网上看到的一切都表明,我需要在打开队列时指定消息选择器。我同意,但我只看到两种打开它的方法:如何使用JavaAPI设置消息选择器?,java,ibm-mq,Java,Ibm Mq,我试图编写一个简单的测试用例,根据消息属性从队列中提取消息,使用7.5.0.3 QMgr和7.5.0.3客户机JAR 我在网上看到的一切都表明,我需要在打开队列时指定消息选择器。我同意,但我只看到两种打开它的方法: MQQueueManager.accessQueue( String queueName, int openOptions); MQQueueManager.accessQueue( String queueName, int openOptio
MQQueueManager.accessQueue(
String queueName,
int openOptions);
MQQueueManager.accessQueue(
String queueName,
int openOptions,
String queueMgr,
String dynamicQueueName,
String altUserId);
这两个选项都不允许我指定消息选择器。我是从命令行批处理应用程序而不是在应用服务器中运行它的,因此不可能使用JMS选择器
以下是有关选择器的IBM文档:它显示选择必须作为MQOPEN调用的一部分进行。尝试从队列读取消息时,应指定选择器,如下所示:
MQMessage ResponseMsg = new MQMessage();
ResponseMsg.correlationId = CorrelationId;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_WAIT;
gmo.waitInterval = WaitTime * 1000;
gmo.matchOptions = MQConstants.MQMO_MATCH_CORREL_ID;
ResponseQueue.get(ResponseMsg, gmo);
MQ JMS API提供了您要查找的消息选择语法的类型。基本mqjavaapi提供基于MessageId和CorrelationId的消息选择,但它还没有提供您正在寻找的类型选择语法。您提供的文档链接是针对MQ C API的 使用MQ JMS API,可以按如下所示选择消息:
// Create JMS objects
connection = cf.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create queue destination
Destination queDest= session.createQueue(que);
// Create consumer with selector
String selector = "category='bucket1'";
MessageConsumer cons= session.createConsumer(queDest, selector);
connection.start();
// receive messages
Message inMessage = cons.receive(5000);
通过属性选择消息是否有效?MQ文档表示必须将其指定为MQOD的一部分。请参阅第五页,当我发送消息时,我希望能够执行类似mqMessage.setStringProperty(“category”、“bucket1”)的操作;然后可以只选择category=bucket1Thanks的消息-我已经看到了。我是在一个独立的java应用程序中完成这项工作的,而不是在应用服务器上。如果没有appserver环境(特别是JNDI),我想我不能使用JMS接口,可以吗?你可以。对于JNDI,如果app server不可用,您可以指向文件服务器。