设为首页 收藏本站
查看: 2918|回复: 0

[经验分享] IBM WEBSPHERE MQ 接收消息中文乱码问题的处理

[复制链接]

尚未签到

发表于 2015-10-3 10:06:35 | 显示全部楼层 |阅读模式
  第一次接触WebSphere MQ,C#的程序总是报错,后来改用java写。但发现一个问题,如果接收时用readFully方法接收字符串,消息里的中文会出现乱码,就是将取到的bytes再转码也无济于事。
出现问题的代码:
            int size = rcvMessage.getMessageLength();
            byte[] p = new byte[size];
            rcvMessage.readFully(p);
费了半天劲,最后在IBM论坛上找到了解决方法。就是发送和接收都用Object。
完整发送代码:


DSC0000.gif import com.ibm.mq.*;
import java.util.Hashtable;


DSC0001.gif DSC0002.gif public class MQSendMessageUtil DSC0003.gif {
DSC0004.gif DSC0005.gif     public MQSendMessageUtil() {
        try {
DSC0006.gif             jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
DSC0007.gif         }
    }

               // define MQ Server Host Name
        private static final String hostname = "192.168.19.2";

        // define MQ Queue Manager Listen Port
        private static final String port = "1414";

        private static final String channel = "S_mq";

        private static final String transport = "MQSeries";

        // define the name of the QueueManager
        private static final String qManager = "QM_mq";

        // and define the name of the Queue
        private static final String qName = "Example";

        public static void sendMessage(Object object) throws Exception {

                MQQueueManager qMgr = null;

                try {

                        // Create a connection to the QueueManager
                        Hashtable properties = new Hashtable();

                        properties.put("hostname", hostname);
                        properties.put("transport", transport);
                        properties.put("channel", channel);
                        properties.put("port", new Integer(Integer.parseInt(port)));
                        properties.put("CCSID", new Integer(1381));

                        qMgr = new MQQueueManager(qManager, properties);

                        // Set up the options on the queue we wish to open
                        int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

                        // Now specify the queue that we wish to open and the open options

                        MQQueue queue = qMgr.accessQueue(qName, openOptions);

                        // Define a simple WebSphere MQ Message
                        MQMessage msg = new MQMessage();

                        msg.writeObject(object);
                        // Specify the default put message options
                        MQPutMessageOptions pmo = new MQPutMessageOptions();

                        // Put the message to the queue
                        queue.put(msg, pmo);

                        queue.close();

                        // Disconnect from the QueueManager

                        // qMgr.disconnect();

                } catch (MQException ex) {
                        ex.printStackTrace();
                } catch (java.io.IOException ex) {

                        ex.printStackTrace();
                } finally {
                        qMgr.disconnect();
                }
        }

        public static void main(String[] args)
        {
                try
                {
                        MQSendMessageUtil.sendMessage("MQ_sys_msg");
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }
                System.out.println("MQ_sys_msg");
        }

    private void jbInit() throws Exception {
    }

DSC0008.gif }  完整的接收代码:


import com.ibm.mq.*;
import java.util.Hashtable;

public class MQReceiveMessageUtil {

    // define MQ Server Host Name
    private static final String hostname = "192.168.19.2";

    // define MQ Queue Manager Listen Port
    private static final String port = "1414";

    private static final String channel = "S_mq";

    private static final String transport = "MQSeries";

    // define the name of the QueueManager
    private static final String qManager = "QM_mq";

  public static Object receiveMessage(String queueName) throws Exception {   
        MQQueueManager qMgr = null;

        try {
            Hashtable properties = new Hashtable();

            properties.put("hostname", hostname);
            properties.put("transport", transport);
            properties.put("channel", channel);
            properties.put("port", new Integer(Integer.parseInt(port)));
            properties.put("CCSID", new Integer(1381));

            //pw.println("Connecting to queue manager: "+qManager+"<br>");
            qMgr = new MQQueueManager(qManager, properties);

            // Set up the options on the queue we wish to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

            // Now specify the queue that we wish to open and the open options
            //pw.println("Accessing queue: "+qName+"<br>");
            MQQueue queue = qMgr.accessQueue(queueName, openOptions);

            // Now get the message back again. First define a WebSphere MQ message
            // to receive the data
            MQMessage rcvMessage = new MQMessage();

            // Specify default get message options
            MQGetMessageOptions gmo = new MQGetMessageOptions();

            queue.get(rcvMessage, gmo);

            //int size = rcvMessage.getMessageLength();
            //byte[] p = new byte[size];
            //rcvMessage.readFully(p);
            
            Object obj = rcvMessage.readObject();
            queue.close();

            qMgr.disconnect();
            //return p;
            return obj;
            
        } catch (MQException ex) {
            ex.printStackTrace();
            return null;
        } catch (java.io.IOException ex) {
            ex.printStackTrace();
            return null;
        }
        finally
        {
            qMgr.disconnect();
        }
    }

    public static void main(String[] args)
    {
        try
        {
            String _str = new String(MQReceiveMessageUtil.receiveMessage("Example"));
            System.out.print(_str);

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-122009-1-1.html 上篇帖子: IBM T61 8889AW9使用心得 下篇帖子: IBM招聘笔试题,比较有意思
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表