【问题标题】:How to find local transmission queue of remote MQ queue in Java?如何在Java中找到远程MQ队列的本地传输队列?
【发布时间】:2015-09-16 06:33:25
【问题描述】:

在我的 Java 应用程序中,我使用

获得 MQQueue 对象
MQQueue tQueue  = qManager.accessQueue(tqName, tqOptions);

队列是一个远程队列。有没有办法获得相应的本地传输队列?

(使用MQ 7.5

谢谢

【问题讨论】:

    标签: java ibm-mq mq


    【解决方案1】:

    是的,使用runmqsc 控制台。

    首先在命令提示符下运行

    runmqsc <qmgr>

    控制台打开后运行

    dis qr<remote q> XMITQ
    

    显示远程队列定义使用的传输队列。

    更新

    另一种方法是使用 PCF 类。

          PCFMessageAgent pcfma = new PCFMessageAgent("QM");
          PCFMessage pcfCmd = new PCFMessage(MQConstants.MQCMD_INQUIRE_Q);
          pcfCmd.addParameter(MQConstants.MQCA_Q_NAME, "Q.REMOTE");
          PCFMessage[] pcfResponse = pcfma.send(pcfCmd);
          String xmitQName = (String) pcfResponse[0].getParameterValue(MQConstants.MQCA_XMIT_Q_NAME);
          System.out.println("XmitQ name " + xmitQName);
    

    【讨论】:

    • 我的问题是关于从我的 Java 程序中获取它的编程方式。程序知道队列管理器的名称和队列的名称。通过调用 getQueueType() 可以确定队列是本地的还是远程的。现在,如果队列是远程的,程序如何找到它对应的本地传输队列?我可以使用任何 API 调用吗?
    【解决方案2】:

    当 MQ 打开一个队列时,它会运行一个名称解析过程来解析要打开哪个本地队列。如果应用程序打开一个 QRemote,它通常会解析为一个传输队列。

    找出已解决队列的名称很容易。队列开启成功后向MQ索取即可:

    public java.lang.String getResolvedQName( )

    【讨论】:

    • 谢谢,但不幸的是它不起作用。这是我的代码:
    • 谢谢,但不幸的是它不起作用。当我调用 getResolvedType() 它返回 1(本地),但 getResolvedName() 仍然返回远程队列的名称
    • 我能够通过 getAttributeString(CMQC.MQCA_XMIT_Q_NAME, CMQC.MQ_Q_NAME_LENGTH); 获得名称;
    • 要么您在队列打开之前访问该字段,要么您发现了一个错误。 C 接口在该字段中返回解析的本地队列名称,如果 Java 接口返回不同的内容,IBM 将在 PMR 下修复它。但我怀疑这可能是时间问题。解析的队列名称永远可以是QLOCAL 以外的唯一时间是 QMgr 运行名称解析之前。可以说即使那样这也会是一个错误,因为该字段应该是空白的,直到 API 调用返回..
    • int openOptions = CMQC.MQOO_OUTPUT | CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_INQUIRE;MQQueue rQueue = sender.qMgr.accessQueue(queueName, openOptions);字符串名称 = rQueue.getResolvedQName(); - 这是代码示例。抱歉,这里还没学会怎么格式化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多