`
witcheryne
  • 浏览: 1100358 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

解决ActiveMQ中,Java与C++交互中文乱码问题

阅读更多

        最近在尝试使用ActiveMQ做系统间的继承,当然少不了Java和C++客户端的交互问题。由于Java与C++在字符串上采用了不同方式的编码(Java-Unicode, C++ - ascii)造成了文本数据传输过程中的编码问题, 下面记录一下解决方

环境:

C++ 端:

操作系统:         Win7

JMS客户端:     CMS 3.1.2 (新版本的CMS需要VS2008编译)

开发环境:         VS2005

 

          Java端:

                   操作系统:          WinXp

                   JMS客户端:       ActiveMQ5.4.1-Core

                   开发环境:           JDK1.6.22

 

          ActiveMQ:

                   ActiveMQ 5.4.1


解决方法:

        根据JMS API对Message类别的定义,最适合多语言见交互的Message类型应该是BytesMessage和TextMessage。由于BytesMessage的readUTF方法在CMS3.1.2中,接收Java端发出的UTF字符时会抛出异常,导致BytesMessage不好使用;

        TextMessage中,无论C++端以哪种格式的数据setText() , Java端接收到的数据都是以ISO-8859-1 格式编码的字符。所以统一在发送和接收时都采用 ISO-8859-1 的方式进行数据传输

 

发送时的代码:

 

	private void writeTextMessage(String txt) {
		try {
			String msg = txt;		
						
			String iso = new String(txt.getBytes("GBK"), "ISO-8859-1");
			
			TextMessage message = pubSession.createTextMessage();
			message.setStringProperty("language", "java");
			message.setText(iso);
			
			pub.publish(message);
			
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} 
	}

 

             接收时的代码:

 

	private void onTextMessage(TextMessage message) throws JMSException {
		String txt = message.getText();
		
		try {
			String gbk = new String(txt.getBytes("ISO-8859-1"), "GBK");
			System.out.println(gbk);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
 

 

Update1: 2011-07-26 10:00

CMS版本不是1.0版,应该是3.1.2

0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    在Java与C++间应用Activemq

    标题中的“在Java与C++间应用Activemq”指的是使用Apache ActiveMQ这一开源消息代理在Java和C++编程语言之间构建通信桥梁。ActiveMQ是Java Message Service (JMS) 的实现,允许分布式系统中的组件通过消息传递进行...

    activeMQ的java简单实例.zip

    2. **JMS接口**:Java应用程序通过JMS接口与ActiveMQ交互。主要接口包括`ConnectionFactory`(创建连接)、`Connection`(建立到消息代理的连接)、`Session`(创建消息消费者和生产者)、`MessageProducer`(发送...

    ActiveMQ之C++与C#通信

    在C++中,我们通常使用Apache ActiveMQ的C++ API(libactivemq-cpp)来与消息队列交互。首先,需要安装libactivemq-cpp库,并通过创建`cpp::Connection`对象连接到ActiveMQ服务器。然后,创建`cpp::Session`对象来...

    ActiveMQ 5 java 源码

    通过深入研究ActiveMQ 5的Java源码,开发者可以更好地理解消息中间件的工作机制,这对于定制化开发、性能调优和问题排查都非常有帮助。同时,这也是学习和掌握分布式系统设计原则、并发编程以及网络通信的好途径。

    测试activeMQ的java程序

    ActiveMQ,作为Java消息服务(JMS)的一个实现,是Apache软件基金会开发的一款开源消息中间件。...通过持续的测试和实践,开发者可以更好地利用ActiveMQ解决实际问题,提升系统的稳定性和可维护性。

    zis.rar_active MQ_activemq_java activeMQ_java 转发

    总结来说,这个压缩包的内容很可能是关于如何使用Java和ActiveMQ实现消息转发的教程或示例代码,涉及到ActiveMQ的基础知识、JMS API的使用、消息转发的配置与编程实现,以及在实际应用中的价值。对于想要学习和掌握...

    C++调用ActiveMQ编译所需要的类库

    C++调用ActiveMQ编译所需要的类库,需要用到的类库都已打包! apr-1.lib activemq-cpp.lib activemq-cpp.dll apriconv-1.lib aprutil-1.lib cppunit.lib libapr-1.lib libapriconv-1.lib libaprutil-1.lib xml.lib ...

    java操作activeMQ(java项目代码及jar包可运行,队列和订阅模式)

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循JMS(Java消息服务)规范,用于在分布式系统中提供高效、可靠的消息传递。在这个Java项目中,包含了使用Java操作ActiveMQ的代码示例和所需的jar包,可以...

    memcached和activeMQ的JAVA示例代码

    2. **Java客户端**:在Java中,可以使用libmemcached或spymemcached库来与memcached进行交互,实现对象的缓存和获取。 3. **基本操作**:包括设置键值对、获取键值对、删除键值对等,这些操作在示例代码中会有所展示...

    activeMQ的java简单实例

    通过运行这些代码,你可以理解ActiveMQ如何与Java应用程序交互,以及如何在实际项目中应用消息中间件来解耦系统组件,提高系统的可扩展性和可靠性。 总结来说,ActiveMQ作为一款强大的消息中间件,提供了丰富的API...

    java中间件之activemq

    Java中间件领域的ActiveMQ是一款由Apache开发的开源消息中间件,它为企业级应用提供高效、可扩展、稳定且安全的消息通信服务。ActiveMQ的核心目标是实现标准的、面向消息的集成,支持多语言环境,确保不同平台之间的...

    ActiveMQ C/C++ 编译库需要的文件

    描述中提到的“java 和C、C++ 通信ActiveMQ中间件的C支持库”表明我们要关注的是ActiveMQ的C/C++客户端库,它允许C或C++应用程序与Java平台上的ActiveMQ服务器进行交互。这个库通常包含了发送和接收消息所需的接口和...

    ActiveMQ开发实例-2

    即使这些应用程序可能运行在不同的操作系统或编程语言环境下,如这里的C++与ActiveMQ的Java背景。通过ActiveMQ,C++开发者可以利用MFC库来创建客户端,实现与ActiveMQ服务器的通信。 首先,我们需要理解ActiveMQ的...

    ActiveMQ基于Java和JavaScript的应用实例

    下面将详细探讨如何使用Java和JavaScript与ActiveMQ交互,并实现应用实例。 首先,我们要理解ActiveMQ的基本概念。消息队列(Message Queue)是一种设计模式,用于解耦生产者(发送消息)和消费者(接收消息)。...

    ActiveMQ问题解决记录

    这篇博客"ActiveMQ问题解决记录"可能涵盖了作者在使用ActiveMQ过程中遇到的问题以及解决这些问题的经验分享。 首先,让我们了解一下ActiveMQ的基本概念。ActiveMQ作为消息中间件,它充当应用程序之间的桥梁,负责...

    ActiveMQ-Java P2P模式MQ实战

    消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行...

    ActiveMQ5.10下载以及交互例子

    在本文中,我们将深入探讨ActiveMQ 5.10版本的下载与交互示例,以及如何通过`Publisher.java`和`Customer.java`这两个文件进行消息的发送和接收。 首先,你需要从官方网站或可靠的源下载ActiveMQ 5.10.1的安装包。...

    使用ActiveMQ让C++与C#通信

    本示例通过使用Apache ActiveMQ,演示了如何实现C++应用程序与C#应用程序之间的消息传递。ActiveMQ是一款开源的消息中间件,它遵循开放消息中间件接口(Open Message Broker Interface, OMBI)标准,并支持多种协议...

    ActiveMQ JAVA简单项目案例

    ActiveMQ 是Apache出品,最流行的,能力...本压缩包是是实现ActiveMQ中点对点与发布订阅模式的java项目,下载后可配合运行好的ActiveMQ服务直接运行。 没有ActiveMQ服务的可下载本人的ActiveMQ消息中间件,运行即可。

    java ActiveMQ的例子

    例如,Spring的JMS模块提供了一种简便的方式来与ActiveMQ交互,允许开发者在Spring应用中轻松地创建消息生产者和消费者。 总结来说,Java ActiveMQ是一个强大的消息中间件,它提供了可靠的消息传输机制,并且具有...

Global site tag (gtag.js) - Google Analytics