[英]Durable Subscriptions in IBM MQ Java classes
我用下面的方法提到的创建持久订阅这里 ,
public MQTopic accessTopic(java.lang.String topicName,
java.lang.String topicObject,
int options,
java.lang.String altUserId,
java.lang.String subscriptionName)
throws MQException
文档指出, subscriptionName - This field is only required if the options parameter specified CMQC.MQSO_DURABLE, but if provided will be used by the queue manager for CMQC.MQSO_NON_DURABLE as well.
因此,我创建了如下主题。
qmanager.accessTopic("TOPICSTR",
"TOPICNAME",
CMQC.MQSO_DURABLE,
null,
"subscription")
但这会引发异常2046(07FE)(RC2046):MQRC_OPTIONS_ERROR。关于如何解决此问题以及使用IBM MQ Java类初始化持久预订主题的任何想法?
首先,对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,其中描述了“主题字符串”,“主题名称”和“主题对象”。 https://www.ibm.com/developerworks/community/blogs/messaging/entry/mq_topics_but_which_type?lang=en
接下来,您应该包括“如果停顿则失败”标志:CMQC.MQSO_FAIL_IF_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);
我想您需要使用更多选项:
CMQC.MQSO_CREATE | CMQC.MQSO_ALTER | CMQC.MQSO_DURABLE
从IBM文档:
选项-打开订阅主题后,以下有效选项如下所示。 如果需要多个选项,则可以将这些值加在一起或使用按位或运算符组合。
CMQC.MQSO_CREATE CMQC.MQSO_RESUME CMQC.MQSO_ALTER
如果未指定这些选项,则假定为CMQC.MQSO_CREATE + CMQC.MQSO_ALTER。 其他有效选项也可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.