将消息放在集群队列上

Placing message on clustered queue

我们正在尝试将消息放入 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 2085MQRC_UNKNOWN_OBJECT_NAME,这通常意味着您所连接的队列管理器无法在本地定义或通过它所属的集群找到此队列。

获得 2085 的另一个原因是如果您尝试为 INPUT (GET) 打开集群队列。您只能 OUTPUT (PUT) 到不在本地队列管理器上的集群队列。如果您从 openOptions 中删除 CMQC.MQOO_INPUT_AS_Q_DEF,它应该可以解决您的问题。与您的问题无关,最好总是包含 CMQC.MQOO_FAIL_IF_QUIESCING 这将允许队列管理器正常关闭并且不会被正在连接的进程阻止。

int openOptions = CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_OUTPUT;

您可以使用以下命令确认您所连接的队列管理器是否也知道其部分存储库中的此队列以及它所属的集群以及它托管在哪些集群队列管理器上:

DIS QC(clustered_queue_name_here) CLUSTER CLUSQMGR

部分存储库仅在第一次访问时了解集群队列,因此它可能不会显示,直到您修复 openOptions 并尝试再次访问它。