【问题标题】:IBM MQI: How to implement message segmentation?IBM MQI:如何实现消息分段?
【发布时间】:2015-04-02 19:45:20
【问题描述】:

我正在寻找使用 MQI 实现消息分段的“正确”方法。

主要我需要实现接收部分,但出于测试目的我还想实现发送端。

也许我太笨了,无法正确搜索,但我没有找到很多关于这个主题的文档/示例。 迄今为止最好的解释: http://www.tek-tips.com/viewthread.cfm?qid=33458(我认为这是从 ibm 开发人员 pdf 中获取的)。这是一个带有一些伪代码/没有 java 代码的一般解释。

mqget 调用有很多标志和可能性,还有对 mqueue 的简单访问。

我尝试过的代码示例将遵循,但也许有人对此有一些经验?

【问题讨论】:

    标签: java ibm-mq


    【解决方案1】:

    这个示例有帮助吗?如果消息长度超过队列的最大消息长度,我允许队列管理器对消息进行分段。

              MQQueue mqQueue = queueManager.accessQueue("SEG.Q", CMQC.MQOO_OUTPUT | CMQC.MQOO_INPUT_AS_Q_DEF | CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_PASS_ALL_CONTEXT);
    
              /**
               * Put a message and allow it to segmented if the length of each
               * the message we are putting exceeds the maximum message length.
               * For test purpose, the maximum message length has been set to
               * 500 bytes on queue. 
               */
              MQMessage msgPut = new MQMessage();
              byte [] largeBuffer = new byte[2000];
    
              for(int i = 0; i< 2000; i++){
                  largeBuffer[i] = 'A';
              }
    
              msgPut.write(largeBuffer);
              msgPut.messageFlags = MQConstants.MQMF_SEGMENTATION_ALLOWED;
              MQPutMessageOptions pmo = new MQPutMessageOptions();
              mqQueue.put(msgPut,pmo);            
              System.out.println("Message put successful");
    
              /* Now receive the same message but as a complete message
               * instead of segments
               */
             MQMessage msgGet = new MQMessage();
             MQGetMessageOptions gmo = new MQGetMessageOptions();
             gmo.options = CMQC.MQGMO_COMPLETE_MSG;
             mqQueue.get(msgGet,gmo);
    

    【讨论】:

    • 我想我尝试了几乎相同的方法,但它失败了:put 操作失败,队列或通道级别的“消息长”。我不知道 get,因为我没有收到任何消息进入队列。
    • 由于访问队列参数,您能具体说明您的想法吗? {CMQC.MQOO_OUTPUT | CMQC.MQOO_INPUT_AS_Q_DEF | CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_PASS_ALL_CONTEXT} 我只设置了 MQC.MQOO_OUTPUT 选项
    • MQC.MQOO_OUTPUT 没问题
    • 我同时使用了输入和输出,因为我确实在同一个应用程序中放置和获取
    • K.但正如我所说,put 的代码不起作用。我试过了,我得到一个 MQJE001: Beendigungscode 2, Ursache 2010(sry, German language) 错误。这意味着“长消息”。我已经用 60 MB 的文件对此进行了测试。
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多