JAVA从MQ读取消息的时候报错及解决

本文档描述了在JAVA中从MQ读取消息时遇到的问题,特别是当消息由MQ资源管理器或其他MQ服务器写入时,使用MQMessage的readUTF()方法会报错。提供了一个解决方案,通过转换消息的读取方式,如先将消息读入字节数组再转换为字符串,避免了报红问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上有一个例子 ,是JAVA将消息写入到MQ,再通过JAVA去读取消息,采用MQMessage读消息的方法readUTF()去读取的时候,如下

 

package com.base;

import java.io.IOException;  
import com.ibm.mq.MQC;  
import com.ibm.mq.MQEnvironment;  
import com.ibm.mq.MQException;  
import com.ibm.mq.MQGetMessageOptions;  
import com.ibm.mq.MQMessage;  
import com.ibm.mq.MQPutMessageOptions;  
import com.ibm.mq.MQQueue;  
import com.ibm.mq.MQQueueManager;  
 
public class testMQ1{  
     //定义队列管理器和队列的名称  
     private static String qmName;   
     private static String qName;  
     private static MQQueueManager qMgr;  
     static{  
         //设置环境:  
         //MQEnvironment中包含控制MQQueueManager对象中的环境的构成的静态变量,MQEnvironment的值的设定会在MQQueueManager的构造函数加载的时候起作用,  
         //因此必须在建立MQQueueManager对象之前设定MQEnvironment中的值.  
         MQEnvironment.hostname="10.10.3.234";          //MQ服务器的IP地址        
         MQEnvironment.channel="KTMAPS01";              //服务器连接的通道  
//         MQEnvironment.CCSID=1386;                      //服务器MQ服务使用的编码1381代表GBK、1208代表UTF(Coded Character Set Identifier:CCSID)  
         MQEnvironment.port=60002;                       //MQ端口  
         qmName = "KTMAPS01";                          //MQ的队列管理器名称  
         qName = "EOCELGRR.ERP";                               //MQ远程队列的名称  
         try {  
             //定义并初始化队列管理器对象并连接   
             //MQQueueManager可以被多线程共享,但是从MQ获取信息的时候是同步的,任何时候只有一个线程可以和MQ通信。  
            qMgr = new MQQueueManager(qmName);  
        } catch (MQException e) {  
            // TODO Auto-generated catch block  
            System.out.println("

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值