簡體   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