溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

amqp協(xié)議鏈接異常怎么排查

發(fā)布時(shí)間:2022-02-24 16:39:28 來源:億速云 閱讀:260 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“amqp協(xié)議鏈接異常怎么排查”,在日常操作中,相信很多人在amqp協(xié)議鏈接異常怎么排查問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”amqp協(xié)議鏈接異常怎么排查”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

    amqp協(xié)議鏈接異常怎么排查

    前言

    amqp是一種通用的消息隊(duì)列數(shù)據(jù)傳輸協(xié)議,典型的MQ應(yīng)用RabbitMQ就實(shí)現(xiàn)了amqp協(xié)議,所以,我們?cè)谑褂胊mqp-client鏈接rabbitmq時(shí),可以使用amqp的鏈接協(xié)議連接rabbitmq。但是博主在嘗試使用amqp協(xié)議鏈接時(shí),碰到了一個(gè)隱藏的連接協(xié)議規(guī)范問題,故記錄在此。

    問題背景

    • 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)

    原因分析

    異常一分析:

    首先拋出上面異常,是因?yàn)閞abbitmq服務(wù)器拒絕了你的操作,中斷了你的連接,所以一般應(yīng)用在剛啟動(dòng)建立連接時(shí)并不會(huì)報(bào)錯(cuò),而是在發(fā)送數(shù)據(jù)時(shí)報(bào)鏈接的錯(cuò)誤。拒絕操作的原因是當(dāng)前鏈接的賬號(hào)沒有vhost的操作權(quán)限。那么基于這個(gè)原因,很可能是如下的問題:

    1、當(dāng)前賬號(hào)沒有權(quán)限

    2、當(dāng)前賬號(hào)沒有操作具體的vhost的權(quán)限

    網(wǎng)上很多人的問題都是第一個(gè),忘記給賬號(hào)賦值權(quán)限了,博主的問題是因?yàn)閍mqp的連接串有問題,導(dǎo)致鏈接了錯(cuò)誤的vhost,所以表象就是沒有權(quán)限。rabbitmq默認(rèn)的vhost是“/”,amqp://keking:kk123456@192.168.1.226:5672/連接串代表的vhost并不是“/”,而是“”。

    異常二分析:

    針對(duì)異常二的問題,在amqp鏈接協(xié)議中,vhost部分的斜桿目錄需要使用%2f代替,不然客戶端在解析URI的時(shí)候,分割鏈接時(shí)就會(huì)拋出協(xié)議不正確的異常

    解決問題

    amqp鏈接協(xié)議詳情如下:

    amqp協(xié)議鏈接異常怎么排查

    所以,要鏈接到“/”的vhost,正確的鏈接應(yīng)該要在尾部加上“%2f”,如

    “amqp://keking:kk123456@192.168.1.226:5672/%2f”

    到此,關(guān)于“amqp協(xié)議鏈接異常怎么排查”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI