繁体   English   中英

IBM MQ Java类中的持久订阅

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM