真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

RabbitMQ第四課多線程收發(fā)異常

異常
    Internal error: unable to determine timeout reason

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、重慶小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

場景
    在調(diào)用rabbitMQ接收數(shù)據(jù)的時候,出現(xiàn)如上的錯誤。代碼斷點在amqp_consume_message函數(shù),發(fā)現(xiàn)如果consume阻塞時,其他線程用該socket去發(fā)送數(shù)據(jù),會導(dǎo)RabbitMQ里面amqp_tcp_socket.c里面amqp_tcp_socket_recv會退出,導(dǎo)致調(diào)用amqp_tcp_socket_recv的wait_frame_inner里面報異常

原因
    剛開始還以為多線程情況下,同時收發(fā),沒有設(shè)置接收超時,就會出現(xiàn)上述問題,提出如下的解決方案:
 timeval valTimeOut;
 valTimeOut.tv_sec = 1;
 valTimeOut.tv_usec = 0;
 ret = amqp_consume_message(m_connState, &envelope, &valTimeOut, 0);
實際上并不是如此

解決
    C語言版本打開一個連接后是用一個結(jié)構(gòu)體amqp_connection_state_t_作為句柄標(biāo)示一個連接;該句柄不是線程安全的,庫是基于單線程,事件響應(yīng)來設(shè)計的,多個線程同時使用,肯定會沖突的。因此收發(fā)都需要實例化不同的amqp_connection_state_t_連接,進行RabbitMQ的連接。


分享題目:RabbitMQ第四課多線程收發(fā)異常
本文來源:http://weahome.cn/article/pidoes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部