IBM MQ Java类中的持久订阅
如前所述,我使用以下方法创建了一个持久订阅 文档说明IBM MQ Java类中的持久订阅,java,ibm-mq,Java,Ibm Mq,如前所述,我使用以下方法创建了一个持久订阅 文档说明subscriptionName-仅当选项参数指定为CMQC.MQSO_-DURABLE时,此字段才是必需的,但如果提供,队列管理器也会将其用于CMQC.MQSO_-NON-DURABLE。 因此,我创建了如下主题 qmanager.accessTopic("TOPICSTR", "TOPICNAME", CMQC.MQSO_DURABLE,
subscriptionName-仅当选项参数指定为CMQC.MQSO_-DURABLE时,此字段才是必需的,但如果提供,队列管理器也会将其用于CMQC.MQSO_-NON-DURABLE。
因此,我创建了如下主题
qmanager.accessTopic("TOPICSTR",
"TOPICNAME",
CMQC.MQSO_DURABLE,
null,
"subscription")
但这会引发异常2046(07FE)(RC2046):MQRC_OPTIONS_ERROR。您知道如何解决此问题并使用IBM MQ java类初始化持久订阅主题吗?我想您需要使用更多选项:
CMQC.MQSO_CREATE | CMQC.MQSO_ALTER | CMQC.MQSO_DURABLE
从IBM文档:
选项-打开订阅主题后,以下有效选项显示如下。如果需要多个选项,可以使用按位or运算符将值相加或组合
CMQC.MQSO_CREATE
CMQC.MQSO_RESUME
CMQC.MQSO_ALTER
如果未指定这些选项,则CMQC.MQSO_创建+
假定为CMQC.MQSO_ALTER。其他有效选项也可用
首先,请注意IBM MQ文档:
public MQTopic accessTopic(java.lang.String topicName,
java.lang.String topicObject,
int options,
java.lang.String altUserId,
java.lang.String subscriptionName)
throws MQException
我一直试图让IBM更新他们的MQ文档,但他们的速度非常慢。问题在于,为MQTopic编写Java代码的人使用了错误的变量字段名。因此,当他们从Java代码生成Java文档时,错误会被忽略
正确的定义是:
public MQTopic accessTopic(java.lang.String topicString,
java.lang.String topicObject, /* aka topic name */
int options,
java.lang.String altUserId,
java.lang.String subscriptionName)
throws MQException
第一个字段是“主题字符串”而不是“主题名称”。请参阅IBM博客中描述“主题字符串”、“主题名称”和“主题对象”的David Ware
接下来,应该包括fail if quiescing标志:CMQC.MQSO\u fail\u if\u quiescing
我通常以非持久性的方式打开主题:
int openOptions = CMQC.MQSO_CREATE | CMQC.MQSO_FAIL_IF_QUIESCING | CMQC.MQSO_MANAGED | CMQC.MQSO_NON_DURABLE;
MQTopic subscriber = qMgr.accessTopic( topicString,
null,
CMQC.MQTOPIC_OPEN_AS_SUBSCRIPTION,
openOptions);
使用int openOptions=CMQC.MQSO_CREATE | CMQC.MQSO_FAIL_IF_QUIESCING | CMQC.MQSO_MANAGED | CMQC.MQSO_DURABLE;我们也可以打开主题进行持久订阅
int openOptions = CMQC.MQSO_CREATE | CMQC.MQSO_FAIL_IF_QUIESCING | CMQC.MQSO_MANAGED | CMQC.MQSO_NON_DURABLE;
MQTopic subscriber = qMgr.accessTopic( topicString,
null,
CMQC.MQTOPIC_OPEN_AS_SUBSCRIPTION,
openOptions);