Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ActiveMQCPP connection.start()挂起_C++_Jms_Activemq_Activemq Cpp - Fatal编程技术网

C++ ActiveMQCPP connection.start()挂起

C++ ActiveMQCPP connection.start()挂起,c++,jms,activemq,activemq-cpp,C++,Jms,Activemq,Activemq Cpp,如果有必要,我正在使用ActiveMQ CPP 5.2.3 我有一个JMS生产者,它使用故障转移传输连接到代理的JMS网络。 当我调用connection->start()时,它会挂断(请参阅) 如果跳过connection start()并调用connection->createSession(),则此调用也会被阻止 要求是我的应用程序将永远尝试连接到代理 有什么建议/解决办法吗 注意: 这不是重复的,因为我在谈论C++和诸如嵌入式代理的解决方案,Spring在C++中是不可用的。 < P>当

如果有必要,我正在使用ActiveMQ CPP 5.2.3

我有一个JMS生产者,它使用故障转移传输连接到代理的JMS网络。 当我调用connection->start()时,它会挂断(请参阅)

如果跳过connection start()并调用connection->createSession(),则此调用也会被阻止

要求是我的应用程序将永远尝试连接到代理

有什么建议/解决办法吗

注意


这不是重复的,因为我在谈论C++和诸如嵌入式代理的解决方案,Spring在C++中是不可用的。

< P>当连接正在等待传输到代理时,这是正常的。start方法必须在任何其他操作之前将客户机的id信息发送给代理,因此如果不存在连接,它必须阻止。您可以在故障转移传输上设置一些选项,如startupMaxReconnectAttempts选项,以控制在报告故障之前尝试连接的时间。请参阅URI配置页面:


谢谢。但如果我使用这个选项connect->start()会抛出异常。如果忽略异常,则调用connect->createSession()将引发异常。我试图在TransportListener::TransportResume()中调用connect->createSession(),但这会导致ActiveMQ库中出现死锁。在“后台”中是否有办法继续尝试建立连接?根据JMS规范,配置完成后可以调用conenction->start()(即在连接->createSession()之后调用connection->start()),但这也不起作用,在创建实际会话之前,代理需要知道客户端Id。最好的做法是允许客户机在启动时挂起,或者在调用TransportResume时触发事件。您无法在不存在的服务器上创建资源。让我看看我是否理解正确-我可以在单独的线程中执行connect->start(),该线程将被永久阻止,直到成功创建连接为止。创建连接后,ActiveMQ库将代表其线程调用d transportResume()。之后,我需要从TransportResume()发送一个事件,以代表其他线程继续初始化(例如,connection->createSession()。我可以直接在TransportResume()中继续初始化吗?我不建议尝试在TransportResume中创建任何资源,您很可能会遇到线程死锁。中断和恢复的回调实际上仅用于信息目的,应小心使用。您可以在它们内部设置触发其他线程的事件。连接建立后,等待connection.start的线程将恢复。