最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從dubbo源碼分析qos-server端口沖突問(wèn)題及解決

 更新時(shí)間:2023年02月17日 09:33:58   作者:brucelwl  
這篇文章主要介紹了從dubbo源碼分析qos-server端口沖突問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在這分布式系統(tǒng)架構(gòu)盛行的時(shí)代,很多互聯(lián)網(wǎng)大佬公司開(kāi)源出自己的分布式RPC系統(tǒng)框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。

而在我們公司一直都在推薦使用dubbo,今天就來(lái)講講在使用dubbo過(guò)程出現(xiàn)的qos-server端口沖突問(wèn)題。

什么是dubbo的qos-server呢?

qos是dubbo的在線運(yùn)維命令,dubbo2.5.8新版本重構(gòu)了telnet模塊,提供了新的telnet命令支持,新版本的telnet端口與dubbo協(xié)議的端口是不同的端口,默認(rèn)為22222,可以通過(guò)配置文件dubbo.properties修改。

在dubbo2.5.7版本之前是不支持注解配置的,因此公司框架對(duì)dubbo做了二次封裝,通過(guò)自定義注解@EnableDuubo來(lái)支持dubbo的注解配置,并簡(jiǎn)化了server provider,server consumer,server registry配置,開(kāi)發(fā)人員只要在spring boot啟動(dòng)類(lèi)中添加@EnableDuubo即可開(kāi)始自己的業(yè)務(wù)代碼開(kāi)發(fā),節(jié)省大量的時(shí)間。

最近在項(xiàng)目開(kāi)發(fā)過(guò)程中由于需要調(diào)試,在本地同一臺(tái)機(jī)器上開(kāi)了兩個(gè)運(yùn)行實(shí)例,一個(gè)是dubbo provider實(shí)例,一個(gè)是dubbo consumer實(shí)例。

首先啟動(dòng)provider實(shí)例沒(méi)有任務(wù)問(wèn)題,當(dāng)啟動(dòng)consumer以后,控制臺(tái)卻拋出如下問(wèn)題,

為了解決端口沖突,開(kāi)始在項(xiàng)目中使用各種idea搜索快捷鍵搜索關(guān)鍵字qos-server和22222都沒(méi)有搜索到任何信息。

一般日志都會(huì)打印包名和類(lèi)型,便于快速定位問(wèn)題,然后這里日志打印根本沒(méi)有輸出包名和類(lèi),趕緊修改日志打印格式配置,終于得到如下錯(cuò)誤信息

原來(lái)是這個(gè)錯(cuò)誤是dubbo的com.alibaba.dubbo.qos.server的Server類(lèi)中打印出來(lái),查看Server類(lèi)源碼發(fā)現(xiàn)在方法start中調(diào)用了netty的初始化方法,并將port作為被外部訪問(wèn)的qos-server端口,代碼如下

問(wèn)題來(lái)了

問(wèn)題1

什么時(shí)候會(huì)啟用qos服務(wù)呢,端口是何時(shí)被賦值的呢?

在Server類(lèi)中可以看到唯一為 port參數(shù)賦值的方法只有setPor()方法,查看發(fā)現(xiàn)也只有在QosProtocolWrapper中調(diào)用了setPort()方法,查看源碼可以發(fā)現(xiàn),在該類(lèi)的startQosServer()方法中會(huì)首先從url中解析qos.enable參數(shù),如果未獲取到該參數(shù)值,則默認(rèn)啟動(dòng)qos服務(wù),同時(shí)服務(wù)端口也是從url中解析,默認(rèn)使用22222。

問(wèn)題2

那么這個(gè)url到底是啥呢?

其實(shí)斷點(diǎn)程序可以發(fā)現(xiàn),該url就是項(xiàng)目中對(duì)dubbo的一些配置信息,例如注冊(cè)中心地址,超時(shí)時(shí)間,超時(shí)重試次數(shù)等等,由于項(xiàng)目中沒(méi)有對(duì)qos服務(wù)的配置,因此全部采用了默認(rèn)配置,導(dǎo)致端口沖突。

問(wèn)題3 

如何禁用qos服務(wù)呢?

雖然qos端口沖突并影響服務(wù)消費(fèi)者消費(fèi)服務(wù),但是每次程序啟動(dòng)總是拋出端口沖突異常,有強(qiáng)迫證的程序肯定以為程序哪里出錯(cuò)了,總會(huì)有那么一點(diǎn)忐忑。

而且大多數(shù)情況可能并不需要這個(gè)qos服務(wù),默認(rèn)開(kāi)啟浪費(fèi)端口,浪費(fèi)機(jī)器資源(雖然資源占用并不一定很多),如果你是 java 注解配置,可以通過(guò)如下代碼禁用qos服務(wù),有些版本可能沒(méi)有提供該API,如下是dubbo 2.6.2中的API

或者通過(guò)dubbo官網(wǎng)已經(jīng)給出了文檔來(lái)配置

dubbo2.6.8 的配置項(xiàng)
dubbo.application.qos-port=2222
dubbo.application.qos-enable=true
dubbo.application.qos-accept-foreign-ip=false

問(wèn)題4

為什么我獨(dú)立搭建dubbo分布式服務(wù)的時(shí)候沒(méi)有出現(xiàn)qos-server端口沖突呢?

原因在于qos-server 需要netty4版本的支持,默認(rèn)情況下dubbo不會(huì)引用netty4的依賴(lài)包,(而項(xiàng)目中有依賴(lài)netty4,因此拋出端口異常,)因此在QosProtocolWrapper類(lèi)中調(diào)用Server類(lèi)的start()方法啟動(dòng)qos服務(wù)時(shí),會(huì)拋出ClassNotFoundException,QosProtocolWrapper的startQosServer()方法僅僅try catch了異常,未做任何處理,因此根本沒(méi)有拋出任何異常,這是極其反對(duì)的一種做法,至少打個(gè)日志啊。

源碼如下:

總結(jié)

1.開(kāi)發(fā)過(guò)程中日志打印及日志打印格式是非常重要的,可能大大減少問(wèn)題定位的時(shí)間,因此一定要注意有效的日志輸出

2.要學(xué)會(huì)解決問(wèn)題的思路,端口沖突是一個(gè)很常見(jiàn)的問(wèn)題,通過(guò)百度或者谷歌搜索可能幾分鐘就能解決,只是想借此來(lái)更多的了解框架的實(shí)現(xiàn)細(xì)節(jié),知其然知其所以然。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea導(dǎo)入module全流程

    idea導(dǎo)入module全流程

    這篇文章主要介紹了idea導(dǎo)入module全流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java如何使用正則表達(dá)式查找指定字符串

    Java如何使用正則表達(dá)式查找指定字符串

    在軟件開(kāi)發(fā)中正則表達(dá)式是個(gè)很有用的功能,使用正則表達(dá)式可以簡(jiǎn)化代碼,省去不少時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Java如何使用正則表達(dá)式查找指定字符串的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • SpringBoot線程池和Java線程池的使用和實(shí)現(xiàn)原理解析

    SpringBoot線程池和Java線程池的使用和實(shí)現(xiàn)原理解析

    這篇文章主要介紹了SpringBoot線程池和Java線程池的用法和實(shí)現(xiàn)原理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 深入探究SpringBoot可以同時(shí)處理多少請(qǐng)求

    深入探究SpringBoot可以同時(shí)處理多少請(qǐng)求

    SpringBoot是一款非常流行的Java后端框架,它可以幫助開(kāi)發(fā)人員快速構(gòu)建高效的Web應(yīng)用程序,但是,許多人對(duì)于SpringBoot能夠同時(shí)處理多少請(qǐng)求的疑問(wèn)仍然存在,在本篇文章中,我們將深入探討這個(gè)問(wèn)題,需要的朋友可以參考下
    2023-07-07
  • 23種設(shè)計(jì)模式(4) java生成器模式

    23種設(shè)計(jì)模式(4) java生成器模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java生成器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn)

    springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn)

    本文主要介紹了springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java聯(lián)調(diào)生成測(cè)試數(shù)據(jù)工具類(lèi)方式

    java聯(lián)調(diào)生成測(cè)試數(shù)據(jù)工具類(lèi)方式

    這篇文章主要介紹了java聯(lián)調(diào)生成測(cè)試數(shù)據(jù)工具類(lèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Mybatis 多對(duì)一查詢(xún)的實(shí)現(xiàn)方法

    Mybatis 多對(duì)一查詢(xún)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Mybatis 多對(duì)一查詢(xún),本文通過(guò)場(chǎng)景分析示例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java多線程編程之ThreadLocal線程范圍內(nèi)的共享變量

    Java多線程編程之ThreadLocal線程范圍內(nèi)的共享變量

    這篇文章主要介紹了Java多線程編程之ThreadLocal線程范圍內(nèi)的共享變量,本文講解了ThreadLocal的作用和目的、ThreadLocal的應(yīng)用場(chǎng)景、ThreadLocal的使用實(shí)例等,需要的朋友可以參考下
    2015-05-05
  • Mybatis-Plus中的查詢(xún)指定字段

    Mybatis-Plus中的查詢(xún)指定字段

    在使用Mybatis-Plus進(jìn)行數(shù)據(jù)查詢(xún)時(shí),可以通過(guò)指定字段來(lái)優(yōu)化查詢(xún)效率,方法一和方法二分別執(zhí)行不同的SQL語(yǔ)句,其中方法二在執(zhí)行時(shí)通常會(huì)更高效,因?yàn)樗赡芡ㄟ^(guò)減少數(shù)據(jù)處理量和優(yōu)化查詢(xún)結(jié)構(gòu)來(lái)提升性能,比較兩種方法的SQL執(zhí)行情況
    2024-09-09

最新評(píng)論

正阳县| 防城港市| 改则县| 香河县| 天津市| 淄博市| 鄂伦春自治旗| 横山县| 武山县| 新密市| 娱乐| 安义县| 元谋县| 民和| 饶平县| 阿克苏市| 沙湾县| 唐山市| 汪清县| 平遥县| 松原市| 乌拉特中旗| 年辖:市辖区| 浦江县| 灯塔市| 康平县| 英超| 鲜城| 临安市| 汉阴县| 汕头市| 松阳县| 永靖县| 合江县| 句容市| 本溪市| 云龙县| 抚顺县| 阳江市| 南涧| 开平市|