在使用接口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;
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);