您好,登錄后才能下訂單哦!
這篇文章主要介紹“amqp協議鏈接異常怎么排查”,在日常操作中,相信很多人在amqp協議鏈接異常怎么排查問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”amqp協議鏈接異常怎么排查”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
amqp是一種通用的消息隊列數據傳輸協議,典型的MQ應用RabbitMQ就實現了amqp協議,所以,我們在使用amqp-client鏈接rabbitmq時,可以使用amqp的鏈接協議連接rabbitmq。但是博主在嘗試使用amqp協議鏈接時,碰到了一個隱藏的連接協議規范問題,故記錄在此。
amqp-client版本:5.4.x
amqp-url
異常一:
11:49:12.329 [AMQP Connection 192.168.1.226:5672] ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occured java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method) ~[?:1.8.0_77] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[?:1.8.0_77] at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[?:1.8.0_77] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_77] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[?:1.8.0_77] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[?:1.8.0_77] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[?:1.8.0_77] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) [amqp-client-5.4.3.jar:5.4.3] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_77] Disconnected from the target VM, address: '127.0.0.1:0', transport: 'socket'
異常二:
java.lang.IllegalArgumentException: Multiple segments in path of AMQP URI: /%2Fapp/kl at com.rabbitmq.client.ConnectionFactory.setUri(ConnectionFactory.java:348) at com.rabbitmq.client.ConnectionFactory.setUri(ConnectionFactory.java:370) at com.jd.blockchain.consensus.mq.factory.RabbitFactory.initConnectionFactory(RabbitFactory.java:42) at com.jd.blockchain.consensus.mq.factory.RabbitFactory.main(RabbitFactory.java:52)
首先拋出上面異常,是因為rabbitmq服務器拒絕了你的操作,中斷了你的連接,所以一般應用在剛啟動建立連接時并不會報錯,而是在發送數據時報鏈接的錯誤。拒絕操作的原因是當前鏈接的賬號沒有vhost的操作權限。那么基于這個原因,很可能是如下的問題:
1、當前賬號沒有權限
2、當前賬號沒有操作具體的vhost的權限
網上很多人的問題都是第一個,忘記給賬號賦值權限了,博主的問題是因為amqp的連接串有問題,導致鏈接了錯誤的vhost,所以表象就是沒有權限。rabbitmq默認的vhost是“/”,amqp://keking:kk123456@192.168.1.226:5672/連接串代表的vhost并不是“/”,而是“”。
針對異常二的問題,在amqp鏈接協議中,vhost部分的斜桿目錄需要使用%2f代替,不然客戶端在解析URI的時候,分割鏈接時就會拋出協議不正確的異常
amqp鏈接協議詳情如下:
所以,要鏈接到“/”的vhost,正確的鏈接應該要在尾部加上“%2f”,如
“amqp://keking:kk123456@192.168.1.226:5672/%2f”
到此,關于“amqp協議鏈接異常怎么排查”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。