如果是通过JAVA将消息写入到MQ,再通过JAVA去读取消息,采用MQMessage读消息的方法readUTF()去读取的时候,就不会报错,可以正常读出来。如果采用在MQ资源管理器中插入测试消息或者是通过另外一台MQ服务器往当前MQ服务器通过远程队例写消息过来,通过JAVA读取出会错,我这里疑点有两个:
1、通过MQ资源管理器放入的消息的编码是什么?是否在读消息的时候需要指定读消息的编码?我通过JAVA进入的编码为1381,读的时候也是1381
2、我现在JAVA这边的MQ LIB是从WEBSPHERE6中取出来的,因为MQ7中带的JAR包老是报一些类不存在,现在的MQ服务是V7,不知道是否与这个有关。
个人感觉第一种原因的可能性最大,但不知道MQ的默认字体是什么?
通过命令DISPLAY QMGR可以查看到当前MQ使用的默认字符集为1381,其它的地方也说MQ在WINDOWS上安装的时候默认字符集为1381,可是我通过JAVA程序去读的时候,设置的CCSID也为1381,也是读的时候老是报如下错误:
java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at com.ibm.mq.MQMessage.readUTF(MQMessage.java:1229)
at test.MessageByMQ.getMessage(MessageByMQ.java:123)
at test.MessageByMQ.main(MessageByMQ.java:146)
我通过JAVA往里面放消息设置的CCSID也为1381却可以正确读出来,但这里就搞不懂为什么读不出来了,
难道是上面提到的第三个原因,我的JAR包是V6的,MQ是V7的?
基本解决:
原来读消息的方法为:readUTF()
但是这种方式在其它的应用程序采用writeUTF写入消息的时候不会报错,就是我上面提到的当前的JAVA程序可以读出该程序中写入的消息,
但是通过MQ资源管理器放入的测试消息就不是UTF这样的格式的,所以会报错,这说面从MQ中读消息的时候读取的格式必须与放入消息的格式相兼容,否则读取消息的时候会报错。
后来尝试采用readLine的方式去读取,可以正常读出来,但是如果写入的是XML这样的消息,采用readLine就不行了,后面尝试readStringOfCharLength方法,可以正常读出客户端应用程序通过writeBytes方法写入的消息,也可以正常读出通过MQ客户端放入的测试报文,
这个问题搞了我一整天,终于可以暂时放一下了。
读的代码如下:
...
MQMessage retrieve = new MQMessage();
String message=retrieve.readStringOfCharLength(32000).trim();
...
分享到:
相关推荐
4. **读取消息**:从MQMessage对象中读取接收到的数据,如使用readUTF()或readBytes()方法。 以下是一个简单的Java接收消息示例: ```java import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import ...
本篇文章将详细介绍三种不同的方法,帮助Java客户端从MQ队列接收消息。 1. **IBM WebSphere MQ JMS API** IBM的WebSphere MQ提供了一套Java Message Service (JMS) API,允许Java应用程序与MQ队列进行通信。首先,...
JAVA向MQ发送消息, JAVA向MQ发送消息, JAVA向MQ发送消息,
WebSphere MQ是IBM提供的一种高性能、高可靠性的消息中间件,它允许分布式系统中的组件之间通过消息进行通信,而无需直接互相了解对方。在Java开发中,与WebSphere MQ交互是常见的需求。以下将详细介绍三种Java向...
Java 实现 MQ 发送接收消息详解 本篇文章将详细介绍如何使用 Java 实现 MQ(Message Queue)发送和接收消息,包括 MQ 的配置、队列管理器的创建、队列的创建、发送和接收消息的 Java 代码。 MQ 配置 要使用 MQ ...
IBM提供了一个Java Message Service (JMS) API,允许Java应用程序通过IBM MQ发送和接收消息。JMS API包含两种主要对象:`QueueSender`(生产者)和`QueueReceiver`(消费者)。 3. **生产者实例**: 生产者应用...
在IT行业中,Java是一种广泛应用的编程语言,而IBM MQ(原名WebSphere MQ)是IBM提供的消息中间件,用于在不同系统之间可靠地传递数据。本文将深入探讨如何使用Java来连接IBM MQ,以实现跨平台的信息交换。 首先,...
MQ是消息中间件的一种,它在分布式系统中扮演着消息传递者的角色,允许不同组件之间通过交换消息进行通信,而无需直接互相依赖。这有助于提高系统的可扩展性和稳定性。 在Java中,我们通常使用开源的消息中间件如...
IBM MQ提供了一个消息队列模型,其中消息被发送到队列,并由接收方从队列中取出。这种模型确保了消息的可靠传输,即使发送方和接收方在传输过程中短暂离线,消息也不会丢失。IBM MQ支持各种接口,包括Java Message ...
Java连接IBM MQ(WebSphere MQ)的Demo是一个典型的示例,用于展示如何在Java应用程序中与MQ消息中间件进行通信。IBM MQ是一个高效、可靠的消息传递系统,它允许分布式应用程序通过消息传递方式进行通信,从而解耦...
Java MQ通常指的是Java Message Service(JMS),这是一个Java平台上的API,用于在分布式环境中创建、发送、接收和读取消息。JMS允许应用程序创建和交换独立于提供商的消息,这意味着你可以更换消息队列服务而不必...
通过MQListener,用户可以灵活地配置规则来控制消息的处理方式,有效解决消息消费中的阻塞、堆积、处理失败等问题。 项目结构 listener服务依赖 ttpaimqlistenerspringSpring项目依赖 ...
描述了java程序代码去访问MQ的SSL加密的通道。如何配置JKS,如何配置MQ服务器的SSL秘钥库,如何配置证书制作证书和秘钥库。主要是如何编写java代码去访问SSL通道并取到数据。
Java MQ,全称为Java消息队列,是一种中间件技术,用于在分布式系统中传递消息,以解耦应用程序组件,提高系统的可扩展性和可靠性。在Java领域,Apache ActiveMQ是广泛应用的开源MQ实现之一,它提供了丰富的特性集和...
本教程将详细讲解如何使用Java客户端从MQ队列中接收消息,主要涉及以下三个核心知识点: 1. **消息队列的基本概念** - 消息队列是一种异步通信机制,它允许应用程序之间通过发送和接收消息进行通信,而不是直接...
Java连接WebSphere MQ(Websphere MQ)是企业级消息传递的一种常见应用场景,它允许Java应用程序与MQ服务器进行通信,实现数据的可靠传输。在Java中,我们可以使用IBM提供的`com.ibm.mq.allclient.jar`库来实现这一...
通过深入理解消息序号的生成、管理及异常处理机制,不仅可以提升MQ系统的稳定性,还能有效应对各种复杂场景下的消息处理挑战。在实际操作中,熟练掌握MQSC命令和系统日志分析技巧,将对维护MQ系统高效运行起到决定性...
本话题将聚焦于如何使用Java编程语言来实现通过IBM WebSphere MQ发送消息。 IBM WebSphere MQ,又称为WMQ,是IBM提供的一款强大、可靠的消息中间件,支持多种操作系统和网络环境,能够确保数据在不同系统间的高效...
《MQ Java编程指南》是一本面向Java开发者的深入解析消息队列(MQ)技术的专业书籍。消息队列作为分布式系统中的重要组件,用于解耦应用、实现异步处理以及提高系统的可扩展性。本书旨在帮助Java开发者熟练掌握如何...
IBM WebSphere MQ是IBM公司开发的消息中间件产品,它能够保证消息在分布式系统中的可靠传递。在IBM WebSphere MQ中,消息持久化是一个重要的特性,它确保了当队列管理器发生异常时,消息数据的安全性和一致性。以下...