您好,登錄后才能下訂單哦!
異常
Internal error: unable to determine timeout reason
場景
在調用rabbitMQ接收數據的時候,出現如上的錯誤。代碼斷點在amqp_consume_message函數,發現如果consume阻塞時,其他線程用該socket去發送數據,會導RabbitMQ里面amqp_tcp_socket.c里面amqp_tcp_socket_recv會退出,導致調用amqp_tcp_socket_recv的wait_frame_inner里面報異常
原因
剛開始還以為多線程情況下,同時收發,沒有設置接收超時,就會出現上述問題,提出如下的解決方案:
timeval valTimeOut;
valTimeOut.tv_sec = 1;
valTimeOut.tv_usec = 0;
ret = amqp_consume_message(m_connState, &envelope, &valTimeOut, 0);
實際上并不是如此
解決
C語言版本打開一個連接后是用一個結構體amqp_connection_state_t_作為句柄標示一個連接;該句柄不是線程安全的,庫是基于單線程,事件響應來設計的,多個線程同時使用,肯定會沖突的。因此收發都需要實例化不同的amqp_connection_state_t_連接,進行RabbitMQ的連接。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。