Java IBMMQI:如何实现消息分段?

Java IBMMQI:如何实现消息分段?,java,ibm-mq,Java,Ibm Mq,我正在寻找用MQI实现消息分段的“正确”方法 主要我需要实现接收部分,但出于测试目的,我还希望实现发送端 也许我在正确搜索方面太笨了,但是我还没有找到很多关于这个主题的文档/示例。 迄今为止最好的解释是: (我想这是取自ibm开发人员pdf)。这是一个带有伪代码/无java代码的一般性解释 对于mqget调用和对MQUE的简单访问,有太多的标志和可能性 我尝试过的代码示例如下,但可能有人对此有一些经验?此示例有帮助吗?这里我允许队列管理器在消息长度超过队列的最大消息长度时对消息进行分段

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

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

也许我在正确搜索方面太笨了,但是我还没有找到很多关于这个主题的文档/示例。 迄今为止最好的解释是: (我想这是取自ibm开发人员pdf)。这是一个带有伪代码/无java代码的一般性解释

对于mqget调用和对MQUE的简单访问,有太多的标志和可能性


我尝试过的代码示例如下,但可能有人对此有一些经验?

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

          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);
MQQueue MQQueue=queueManager.accessQueue(“SEG.Q”,CMQC.MQOO_输出| CMQC.MQOO_输入|作为_Q_定义| CMQC.MQOO_失败|如果|静止| CMQC.MQOO u通过|所有上下文);
/**
*如果每条消息的长度
*我们放置的消息超过了最大消息长度。
*出于测试目的,已将最大消息长度设置为
*队列上有500个字节。
*/
MQMessage msgPut=新MQMessage();
字节[]大缓冲区=新字节[2000];
对于(int i=0;i<2000;i++){
大缓冲区[i]=“A”;
}
msgPut.write(大缓冲区);
msgPut.messageFlags=MQConstants.MQMF_SEGMENTATION_ALLOWED;
MQPutMessageOptions pmo=新的MQPutMessageOptions();
mqQueue.put(msgPut,pmo);
System.out.println(“消息输出成功”);
/*现在接收相同的消息,但作为完整消息
*而不是分段
*/
MQMessage msgGet=新MQMessage();
MQGetMessageOptions gmo=新的MQGetMessageOptions();
gmo.options=CMQC.MQGMO_COMPLETE_MSG;
mqQueue.get(msgGet,gmo);

我想我尝试了几乎相同的方法,但失败了:put操作失败,队列或chanel级别出现“message to long”。我不知道get,因为我在队列中没有收到任何消息。由于访问队列参数,您能否指定您的想法?{CMQC.MQOO_OUTPUT | CMQC.MQOO_INPUT_AS_Q_DEF | CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_PASS_ALL_CONTEXT}我只设置了MQC.MQOO_输出选项MQC.MQOO_输出良好我使用了输入和输出,因为我在同一个应用程序中输入和输出。但正如我所说,put的代码不起作用。我尝试了一下,得到了一个MQJE001:Beendigungscode 2,Ursache 2010(sry,德语)错误。意思是“长消息”。我已经用一个60 MB的文件测试过了。