编程语言
首页 > 编程语言> > java – 使用mq客户端获取Alias Queue的基础对象队列名称

java – 使用mq客户端获取Alias Queue的基础对象队列名称

作者:互联网

我有MQ客户端代码,可以浏览Alias Queue以获取Alias Queue的基础对象名称(即Alias队列指向的本地队列的名称).但是,只有当MQ客户端连接到与客户端代码在同一主机上运行的MQ Manager时,代码才有效,但在客户端代码连接到远程主机上的MQ Manager时则不行.

客户代码:

MQEnvironment.hostname = "192.168.1.3";
MQEnvironment.port = "1415";
MQEnvironment.channel = "ADMIN.SVRCONN";

MQQueueManager mqQueueManager = new MQQueueManager(null);

int openOptions = CMQC.MQOO_BROWSE;// + CMQC.MQOO_RESOLVE_LOCAL_Q;

MQQueue mqQueue = mqQueueManager.accessQueue("AN.ALIAS.QUEUE.NAME", openOptions);

String resolvedName = mqQueue.getResolvedQName();

// resolvedName is null when the MQ Manager is on a remote host 
System.out.println("Resolved Queue Name: " + resolvedName);

当Alias Queue的已解析队列名称为null时,MQ Manager的错误日志将显示以下单个条目:

AMQ9208: Error on receive from host devlaptop (192.168.1.5).

EXPLANATION:
An error occurred receiving data from devlaptop (192.168.1.5) over TCP/IP.
This may be due to a communications failure.
ACTION:
The return code from the TCP/IP (recv) call was 10054 (X'2746'). Record these
values and tell the systems administrator. 

客户端代码是否可以获取远程MQ Manager的Alias Queue的基础对象名称?如果是这样,怎么样?我在某处丢失了远程权限吗?或者我的客户端代码openOptions错了吗?

注意:队列管理器中的别名队列或任何其他队列未进行群集.

解决方法:

您在服务器上看到的是客户端在不关闭连接的情况下关闭. TCP将其关闭,QMgr会发出您在QMgr日志中看到的错误.如果客户端收到错误,您会看到它返回给客户端.

该问题未指定您尝试打开的别名是否已群集.如果它是群集的,那么我们希望解析的名称根据文档为空.在这种情况下,OPEN解析为传输队列,但不知道应用程序是哪一个.在应用程序看到的返回句柄中,已解析的队列和QMgr名称保留为空.

这将在知识中心的Name Resolution部分中介绍.请参阅第1列中的空行队列管理器和第2列中具有CLUSTER属性的别名队列的表行.

标签:mq,java,ibm-mq
来源: https://codeday.me/bug/20190828/1754237.html