Java 将消息放置在集群队列上

Java 将消息放置在集群队列上,java,ibm-mq,Java,Ibm Mq,我们正在尝试将消息放置在IBM消息集群队列上。将消息放入队列时,将引发以下错误: MQJE001: Completion Code '2', Reason '2085'. 当我们尝试将消息放置在某个队列管理器的本地队列上时,它工作正常。但在集群队列上,它不起作用 MQQueue queue = null; MQMessage mqMessage = null; MQEnvironment.hostname = settings.getServer(); MQEnvironment.chann

我们正在尝试将消息放置在IBM消息集群队列上。将消息放入队列时,将引发以下错误:

MQJE001: Completion Code '2', Reason '2085'.
当我们尝试将消息放置在某个队列管理器的本地队列上时,它工作正常。但在集群队列上,它不起作用

MQQueue queue = null;
MQMessage mqMessage = null;

MQEnvironment.hostname = settings.getServer();
MQEnvironment.channel = settings.getChannel();
MQEnvironment.port = settings.getPort();

MQQueueManager queueManager = new MQQueueManager(settings.getQueueManager());

int openOptions = CMQC.MQOO_INPUT_AS_Q_DEF | CMQC.MQOO_OUTPUT;

queue = queueManager.accessQueue(settings.getQueue(), openOptions);

有人可以帮助我们将消息放置在集群队列上吗?

MQRC
2085
is
MQRC\u UNKNOWN\u OBJECT\u NAME
,这通常意味着您连接到的队列管理器无法找到本地定义的或通过它所属的集群找到此队列

获得
2085
的另一个原因是,如果您试图为
输入打开集群队列(
get
)。您只能将
输出
放入
)到不位于本地队列管理器上的群集队列。如果从
openOptions
中删除
CMQC.MQOO_INPUT_AS_Q_DEF
,它应该可以解决您的问题。与您的问题无关,最好始终包括
CMQC.MQOO\u FAIL\u IF\u QUIESCING
,这将允许队列管理器正常关闭,而不会因您的进程连接而中断

int openOptions = CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_OUTPUT;

您可以使用以下命令确认所连接的队列管理器是否也知道其部分存储库中的该队列,以及该队列是哪个集群的成员,以及它承载在哪个集群队列管理器上:

DIS QC(clustered_queue_name_here) CLUSTER CLUSQMGR
部分存储库仅在第一次访问集群队列时才了解该队列,因此在您修复
openOptions
并再次尝试访问它之前,它可能不会显示