IBM MQI:如何实现消息分段?

时间:2015-04-02 09:14:18

标签: java ibm-mq

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

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

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

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

我尝试过的代码示例会随之而来,但也许有人对此有一些经验?

1 个答案:

答案 0 :(得分:2)

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

          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);