`
johnnywww
  • 浏览: 20857 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

修正ActiveMQ C++客户端(CMS)当服务器关闭程序无法退出问题

 
阅读更多

现在正用ActiveMQ C++客户端开发,发现有个问题,当开始连接ActiveMQ服务器成功后,成功发送数据后,此时ActiveMQ服务器停止,客户端无法退出,出现挂掉现象。

通过调试代码当客户端退出调用如下代码:

程序报异常,检查代码发现在ActiveMQSession.cpp中,delete producer会调用close方法,然后调用ActiveMQSession::disposeOf方法,而里面会调用this->connection->disposeOf( id );这个过程会发送指令到服务器,在服务器关闭后会抛异常,而没有调用session的this->producers.remove( id ); 在producer的析构函数中,会将所有异常捕获不往外抛,此时proceducer对象被顺利删除,在session的producers中并没有将此producer移除掉,而在session关闭时,会调用ActiveMQSession::close() 方法,在此方法中将所有的producer关掉,而此时会调用到被删除的producer,所以报错。

同理session对connection也有这个情况,在ActiveMQSession::close()方法中,会同样调用this->connection->disposeOf( this->sessionInfo->getSessionId() );让connectio移除session.

所以需要修改代码,在ActiveMQSession.cpp中增加如下代码

修改ActiveMQSession::close()方法将this->connection->disposeOf( this->sessionInfo->getSessionId() );改为如下代码:

修改ActiveMQSession::disposeOf( Pointer<ProducerId> id )方法,将this->connection->disposeOf( id );改为如下代码:

修改ActiveMQSession::disposeOf( Pointer<CustomerId> id )方法,将this->connection->disposeOf( id );也改为如上代码

在项目中添加HHESOCKET_ERROR预定义宏,重新编译activemq项目即可

分享到:
评论

相关推荐

    ActiveMQ客户端

    ActiveMQ客户端库是用于与ActiveMQ服务器交互的接口,允许开发者在他们的应用中发送和接收消息。这个压缩包包含的是Apache ActiveMQ 5.10.0版本,它是一个稳定且广泛使用的版本。 ActiveMQ客户端的核心概念: 1. *...

    ActiveMQ C++ Windows客户端 3.8.3例子代码(含头文件和编译出来的dll和lib)

    activemq的最新的CMS客户端代码是3.8.3,由于在windows下编译比较麻烦,遍寻网络不获,所以自己仔细研究了一下,终于编译成功,分享给大家。附件中的例子工程在vs2010下编译通过。如果需要移植到自己的工程里,仅...

    activemq spring 客户端配置

    标题中的“activemq spring 客户端配置”指的是如何在Spring框架中设置Apache ActiveMQ作为消息中间件的客户端。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了多种消息协议,如JMS(Java Message ...

    ActiveMQ单客户端

    在这个“ActiveMQ单客户端”的项目中,我们看到的是一个使用C# WinForms构建的简单示例,它展示了如何实现一个服务端与一个客户端之间的即时消息收发。 首先,我们要理解ActiveMQ的核心功能:作为消息代理,它负责...

    activeMQ 服务端客户端 java代码

    首先,我们需要在服务器端安装并配置 ActiveMQ。通常,可以从官方网站下载最新版本的 ActiveMQ 并解压到指定目录。在解压后的 `bin` 目录下,有多个启动脚本,例如 `activemq start`(Windows)或 `./bin/activemq ...

    activemq cms

    ActiveMQ CMS作为C++客户端库,允许开发者创建生产者(发送消息)和消费者(接收消息),这些消息可以跨网络传输,并且支持多种协议,如Openwire、AMQP、STOMP等。 在使用ActiveMQ CMS之前,你需要先安装Apache ...

    activemq C#客户端使用demo

    在C#中使用ActiveMQ,你需要引用Apache.NMS和Apache.NMS.ActiveMQ这两个库,它们包含了C#客户端与ActiveMQ服务器交互所需的所有功能。首先,确保已经正确安装并配置了ActiveMQ服务器,可以通过下载并运行ActiveMQ的...

    ActiveMQ多客户端

    安装完成后,启动ActiveMQ服务器,以便我们的客户端能够连接并发送/接收消息。 接下来,我们将构建C# WinForms应用程序。`Producer`项目是我们的消息生产者,它会创建并发送消息到ActiveMQ服务器。在C#中,我们可以...

    自己实现的 ActiveMQ 多线程客户端 包含生产消息客户端和消费者消息客户端

    - **Amq_Consumer.cpp**:消费者客户端的实现,负责接收和处理来自 ActiveMQ 服务器的消息。 - **time.cpp**:可能包含与时间相关的函数,如计时器或延迟发送等,用于消息处理的时间控制。 4. **跨平台兼容性**:...

    基于SpringBoot开发的ActiveMQ虚拟主题客户端(包含发布者和订阅者)

    基于SpringBoot开发的ActiveMQ虚拟主题客户端,达到消费者多点消费、负载均衡和故障转移的目的。 详情可以参考这里: https://my.oschina.net/noryar/blog/1573047 https://my.oschina.net/noryar/blog/1575003

    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 ...

    Active MQ C++实现通讯 X86 librariy

    Active MQ C++实现通讯 X86 librariy:CMS (stands for C++ Messaging Service)类似于JMS API用于同Message Brokers通讯(例如Active MQ)。 APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如...

    在Java与C++间应用Activemq

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

    ActiveMQ开发实例-2

    通过ActiveMQ,C++开发者可以利用MFC库来创建客户端,实现与ActiveMQ服务器的通信。 首先,我们需要理解ActiveMQ的核心概念,包括生产者、消费者、队列和主题。生产者是发布消息的源头,消费者则是接收消息的应用。...

    activemq监控服务器状态,应用异常并发送邮件

    activemq监控服务器状态,应用异常并发送邮件详细Linux配置过程。 主要支持功能: 1、服务器CPU异常预警 2、服务器硬盘不足预警 3、tomcat进程自动关闭后自动启动及预警 4、数据库异常预警等等。

    ActiveMQ之C++与C#通信

    本教程将聚焦于如何利用ActiveMQ实现C++和C#之间的通信。 首先,我们需要理解ActiveMQ的基本工作原理。ActiveMQ作为消息代理,接收生产者发送的消息,并存储在消息队列中,等待消费者来消费。消息可以是点对点...

    基于JDK 11的ActiveMQ Java客户端设计源码示例

    该示例项目为基于JDK 11构建的ActiveMQ Java客户端,包含30个文件,涵盖9个JAR包、6个C#源文件、2个配置文件、2个资源文件、1个许可证文件、1个项目文件和1个可执行文件。项目主要采用Java语言编写,为用户提供一个...

    activemq_lib.zip

    综上所述,这个压缩包包含了一套完整的编译和运行ActiveMQ C++客户端所需的依赖库和一个示例程序。用户需要了解如何配置这些库,解决可能出现的编译问题,并且能够利用提供的示例程序来理解和使用ActiveMQ C++ API,...

    activemq_CPP_2018最新版本全部所需文件附 expat文件

    标题中的"activemq_CPP_2018最新版本全部所需文件附 expat文件"指出,这个压缩包包含了2018年最新的ActiveMQ C++客户端的所有必要组件,并且附带了expat库。ActiveMQ是一款开源的消息中间件,而C++版本的客户端则...

    activeMQ推送服务端和客户端完整案例

    在这个"ActiveMQ推送服务端和客户端完整案例"中,我们将探讨如何设置和使用ActiveMQ进行服务端与客户端之间的消息推送。 **1. 安装与配置ActiveMQ** 首先,你需要下载并安装ActiveMQ。这个案例中可能包含了安装包和...

Global site tag (gtag.js) - Google Analytics