在使用接口Channel::Create()连接到rabbitmq时,如果网络中断或者ip端口地址不对的时候,程序就会一直阻塞在这个调用上,没有 返回值没有异常提示,这种情况如果你想提示个错误什么的就无能为力了,Panda工作中也遇到这个问题,我想:如果他能提供一个连接超时异常就好了,毕竟 SimpleAmqpClient只是对另外一个c语言开源项目rabbitmq-c的封装,而且我记得rabbitmq-c是支持我所说的功能的。下面 请跟随我一起一步一步完成这个事情吧。

 

 1
1 int m_nSockfd;
2 int m_nChannelIdSend;
3 int m_nChannelIdReve;
4 int m_nChannelIdResult;
5 amqp_connection_state_t m_Connection;
6 amqp_bytes_t m_stReply_to_queue;
View Code
       m_Connection = amqp_new_connection();
 2     m_nSockfd = amqp_open_socket(m_strIp.toLocal8Bit().data(), m_nPort);
 3     amqp_set_sockfd(m_Connection, m_nSockfd);
 4     amqp_login(m_Connection, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN,m_strRabbitUser.toLocal8Bit().data(), m_strRabbitPwd.toLocal8Bit().data());
 5 
 6     //生产者
 7     amqp_channel_open(m_Connection, m_nChannelIdSend);
 8     amqp_get_rpc_reply(m_Connection);
 9     amqp_exchange_declare(m_Connection, m_nChannelIdSend, amqp_cstring_bytes("ping") , Type,
10                           0,1,0,0, amqp_empty_table);//绑定交换器 amqp_cstring_bytes("ping")
11 
12     m_strExchange = "ping";
13     m_strRoutingkey = "rpc";
14     m_pProducer1 = new CMqProducerThread(m_Connection, m_nChannelIdSend, m_strExchange, m_strRoutingkey, this);
15     connect(m_pProducer1, SIGNAL(SendProcess(int, QString)), this, SLOT(SetProcess(int, QString)));
16     m_pProducer1->start();
17 
18     //测试结果上传
19     amqp_channel_open(m_Connection, m_nChannelIdResult);
20     amqp_get_rpc_reply(m_Connection);
21     amqp_exchange_declare(m_Connection, m_nChannelIdResult, amqp_cstring_bytes("testResult") , Type,
22                           0,1,0,0, amqp_empty_table);
23     m_strExchange = "testResult";
24     m_strRoutingkey = "result";
25     m_pResoultThread = new MQResultThread(m_Connection, m_nChannelIdResult, m_strExchange, m_strRoutingkey, this);

相关文章: