【问题标题】:Client Receive Exit with IBM Websphere MQ JMS使用 IBM Websphere MQ JMS 的客户端接收退出
【发布时间】:2015-03-31 00:30:28
【问题描述】:

我正在尝试按照此处的建议在 java 中实现接收退出: http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.0.1/com.ibm.mq.csqzaw.doc/jm11171_.htm

  // This method implements the receive exit interface
  public ByteBuffer channelReceiveExit(MQCXP channelExitParms,
                                   MQCD channelDefinition,
                                   ByteBuffer agentBuffer)
 {
  // Complete the body of the receive exit here
 }

我看到调用了 exit 方法,并且按照文档,我希望 agentBuffer 包含传入消息的数据。但是agentBuffer似乎每次都是null,所以我看不出有什么办法影响消息数据。

任何线索将不胜感激。

UPD 我错了 agentBuffer 总是空的,它不是。在 T.Rob 回答之后,我设法用 MQCXP.ExitReason = 14 (MQXR_XMIT) 捕获了几个呼叫。 通过其中一个调用,我在缓冲区中接收消息数据,并且看起来可以修改这些数据。 但是,其他调用仍然存在问题,具有相同的 ExitReason,但不对应任何实际消息传输。我需要跳过这样的电话,但不知道如何区分它们。

知道我该怎么做吗?

【问题讨论】:

    标签: java jms ibm-mq


    【解决方案1】:

    MQ 中有几种通道出口。当整个消息都在缓冲区中时,MCA 通道(QMgr-to-QMgr)提供了一个可用的退出点。该出口点调用消息出口。所有通道、MCA 和 MQI(客户端)都使发送/接收出口点可用。每当调用从一个通道代理到另一个的传输时,都会执行发送/接收出口点。

    在客户端通道的情况下,可以为不包括消息传输的流调用接收出口,或者可以为单个消息多次调用它们。由程序检查 MQCXP structure 以确定流经客户端通道的 API 调用以及代理缓冲区在该时间点是否应该包含任何内容。

    请注意,发送和接收出口通常成对工作。由于队列管理器不从 MCA 调用 Java 程序,因此队列管理器端的任何相应发送或接收出口都将用 C 语言编写。

    有关更多信息,请参阅Channel send and receive exit programs 上的手册页。

    【讨论】:

      【解决方案2】:

      在 MQ 中编写出口代码非常困难,需要深入了解 MQ。 SVRCONN/CLNTCONN 通道对上有双向流量,您看不到整个消息(除非它小于 32758 字节)。您在通道发送/接收出口中看到的是传输段标头 (TSH) 消息。注意:IBM 没有记录 TSH 消息!!!

      MCA(消息通道代理)为 MQXR_*** 定义的各种“ExitReason”调用通道发送/接收出口。

      但是 agentBuffer 似乎每次都为空,所以我看不到任何办法 影响消息数据。

      那是因为你不了解MQ,也不了解双向通道的流程。您确实意识到 TSH 消息是二进制而不是纯文本!?!正确的?你是在 HEX 中转储/打印缓冲区还是在做 System.out.println?如果是后者,请参阅我在这篇文章中的第一句话。

      使用调试器并查看 TSH 数据。请不要问为什么您会像我所说的那样查看奇怪的东西,IBM 没有记录 TSH 消息!如果您想了解信息,请查看 Wire Shark 的代码,因为他们对 TSH 消息进行了逆向工程。

      最后,您为什么要编写通道发送/接收出口,因为除了使用出口之外,还有许多其他方法可以完成查看消息流。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 2017-04-30
        • 2013-05-03
        • 1970-01-01
        • 2019-03-17
        相关资源
        最近更新 更多