ActiveMQ-cpp客户端程序应用异常退出问题

笔者使用ActiveMQ作为系统中消息分发的服务器,由Java Web程序读取数据库实时记录作为Producer,接收端为C++Builder开发的客户端程序,常驻客户端右下角,弹窗显示实时消息。

测试时发现,当客户端断网(网线拔掉)或者服务器重启等连接中断时,客户端会直接退出,windows也没有报程序崩溃的问题,很是费解。

Debug调试代码发现问题出在自定义的Concumer类的异常处理时,调用了exit(1);

//SimpleAsyncConsumer.cpp 【1】

void SimpleAsyncConsumer::onException( const CMSException& ex AMQCPP_UNUSED ) 

{

    printf("CMS Exception occurred.  Shutting down client.\n");

    exit(1);

}

注释掉exit(1)后问题解决,客户端不会再异常退出了。不过拔掉网线测试时,客户端不能检测到与服务器连接已断开的状态,笔者采用在SimpleAsyncConsumer类中添加状态变量的方式。

void SimpleAsyncConsumer::onException( const CMSException& ex AMQCPP_UNUSED ) 

{

    printf("CMS Exception occurred.  Shutting down client.\n");

    connflag= false;

}

上层调用程序实时检测连接状态,检测到false时释放资源,等待重新连接。

【1】引用:http://blog.sina.com.cn/s/blog_a459dcf501017ooh.html 邵明博客ActiveMQ完整的C++客户端例子(源码) ,文中使用的客户端concumer参见此文。

时间: 2024-10-12 22:23:28

ActiveMQ-cpp客户端程序应用异常退出问题的相关文章

WPF PasswordBox鼠标进入时程序异常退出的解决办法

最近在开发了一个程序中用到了PasswordBox控件,但是在程序给别人用的时候,鼠标一进入控件时程序就异常退出,查了下windows日志,错误显示如下: 应用程序: WpfPasswordTest2.exe Framework 版本: v4.0.30319 说明: 应用程序通过 System.Environment.FailFast(string message) 请求终止进程. 消息: 不可恢复的系统错误. 堆栈: 在 System.Environment.FailFast(System.S

Linux C程序异常退出怎么办——core文件帮你忙

想必你一定遇到过Linux下程序异常退出的问题,异常退出貌似有一种神奇的魔力,会让你神经突然紧张.不要怕,Linux是很强大的,在程序退出的时候,会在可执行文件所在的目录生成一个core文件,它很好地记录了一些神秘而又必要的东西,帮助你定位到错误的根源,想想以前面试的时候人家闻到core文件,我答不上来,你说面试官会怎样想,那么就来说说core文件. core文件实际上就是一个内存映象同时加上一些调试信息. 首先,你得打开系统的core文件生成开关吧,终端中输入ulimit -c命令,若显示0表

android捕获程序异常退出

今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类.进去一看,果然.顺便学习一下. Android系统的"程序异常退出",给应用的用户体验造成不良影响.为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理.通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可. 代码: public class CrashHandler implements Un

程序异常退出 却没有产生core文件

程序异常退出  却没有产生core文件 http://www.cnblogs.com/my_life/articles/4107333.html

转 C#WinForm程序异常退出的捕获、继续执行与自动重启

特别声明:本文是转载的,在这里向原作者表示深深的感谢!解决我们的一个大问题! 本文参考网上搜索的信息,并做了适当修改可以让捕捉到异常之后阻止程序退出. 另给出了通过命令行自动重启的方法. 如果一个线程里运行下面的代码 int a = 0; int c = 10 / a; 将会导致程序自动结束,而且没有任何提示信息 但是如果是在主线程里运行这个代码,是会弹出异常信息对话框的 请问如何在线程里也出现这个异常信息对话框.或者避免程序直接退出,忽略异常,继续往下执行呢? 在WINFORM主线程捕获全部异

客户端程序调用zookeeper报len4807928异常

一.故障分析与解决 1.dubbo-zookeeper注册中心数据量太大.导致客户端与其通信失败 异常现象图: 2.异常分析 znode节点上的数据太大,超过长度,程序处理失败 3.解决方法 在zookeeper客户端程序启动start.sh中加入"-Djute.maxbuffer=10240000"增加它的最大容量 参数位置:JAVA_MEM_OPTS="-Djute.maxbuffer=10240000" 加入之后启动java程序,观察日志.无之前异常 二.zo

C#关于软件界面无响应、BUG报警、程序异常退出等情况的监控和报警

对程序的监控,一般采用另外一个进程进行监控(即主进程和监控进程),主进程运行后,先查找下看有没有还在残留运行的监控进程,如果有先结束监控进程,然后重新启动. 如何监控主程序的思路是:主程序中开辟一个共享内存映射文件,通过定时器向文件写入变化的信号数据(自定义).监控程序定时从共享内存文件中读取信号数据,并和上次读取的信号数据进行对比,如果不一致表示主程序运行正常,如果不一致,表示运行异常或者程序异常退出. 内存映射文件 内存映射文件是由一个文件到进程地址空间的映射. C#提供了允许应用程序把文件

MHA监控进程异常退出(MHA版本:0.56)

最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [warning] shutdown_script is not defined.Mon Dec 21 20:16:07 2015 - [info] Set master ping interval 1 seconds.Mon Dec 21 20:16:07 2015 - [info] Set sec

TOMCAT异常退出分析和解决方法

最近遇到一个很诡异的问题,远程登录服务器,本来是想查看一下Tomcat的运行情况,结果用鼠标把窗体一拖,Tomcat居然自己关上了!就好像是自己按下了Ctrl+C一样!同事的电脑都没有出现这种情况,后来换了鼠标也不行(第一个反应就是鼠标的问题).最后关了几个正在运行的软件,居然又好了. 经过排查,确定是"有道词典"的问题,这个软件有个"划词"的功能,就是它搞的鬼,把"划词"功能一关就好了. 借着个机会整理一几种tomcat异常退出的情况和解决办法