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参见此文。

你可能感兴趣的:(C/C++,ActiveMQ)