第一天
上午九點(diǎn)到下午三點(diǎn)左右驾霜,入職活動(dòng)結(jié)束灌闺,被帶到工位。
-
安裝環(huán)境鸠匀,
- jdk 1.8 64位
- maven這邊工程通過maven構(gòu)建缀棍,推薦使用maven3以上版本
- IDEA 下載爬范。idea自帶maven插件青瀑,但需要在默認(rèn)的settings.XML文件中添加內(nèi)部的maven遠(yuǎn)程倉庫地址
- git下載安裝,代碼寄存在gitlab哑诊。
- 所有安裝環(huán)境部署完畢之后镀裤,了解工具的使用
-
熟悉團(tuán)隊(duì)的各位成員暑劝,相互認(rèn)識(shí)和學(xué)習(xí)
- 注意事項(xiàng):
- 每周三晚上八點(diǎn)之前提交周報(bào):寫這一周的學(xué)習(xí)內(nèi)容,遇到的問題毁习,解決的方法纺且,什么收獲
- 每天的學(xué)習(xí)中遇到的問題記下來稍浆,晚上找時(shí)間向師傅請教。做到當(dāng)天的問題當(dāng)天解決朗伶。
第二天
- 學(xué)習(xí)阿里的代碼編程規(guī)范
- 根據(jù)規(guī)范中總結(jié)的經(jīng)驗(yàn)论皆,結(jié)合自己之前編碼中的個(gè)人習(xí)慣進(jìn)行反思点晴,發(fā)現(xiàn)自己存在之前存在很多編碼不規(guī)范的地方粒督,對這些地方進(jìn)行重點(diǎn)總結(jié)(規(guī)范內(nèi)容較多,后續(xù)還會(huì)繼續(xù)看)
- 了解spring boot仇矾。由于內(nèi)網(wǎng)資料看不到贮匕,自己在外網(wǎng)搜一下相關(guān)教程刻盐,并使用spring boot搭建一個(gè)hello world程序敦锌。
第三天
熟悉信用證基本概念乙墙,了解國內(nèi)跟單流程
-
java基礎(chǔ)復(fù)習(xí):
-
jvm類加載機(jī)制
- 類加載器
類加載器類型 名稱 負(fù)責(zé)加載 加載的類 Bootstrap ClassLoader 引導(dǎo)類加載器 核心java class 所有java.開頭的類 Extension ClassLoader 擴(kuò)展類加載器 擴(kuò)展的java class javax.開頭的、放在ext目錄下面的 System ClassLoader 系統(tǒng)類加載器 用戶程序自身的class 系統(tǒng)中配置的環(huán)境變量classpath路徑下面的類 - 類加載機(jī)制
- 全盤負(fù)責(zé):當(dāng)一個(gè)classLoader加載一個(gè)類的時(shí)候汉买,該class所依賴的所有class 也由這個(gè)classloader負(fù)責(zé)載入蛙粘。除非是顯示的使用另一個(gè)classLoader載入出牧。
- 雙親委托:先讓父類的加載器加載崔列,如果父類加載器無法加載的話赵讯,再該類的加載器進(jìn)行加載。
垃圾回收
內(nèi)存模型
基礎(chǔ)集合類
jdk 8 新特性
-
servlet
- 生命周期:
- 初始化:servlet容器會(huì)在啟動(dòng)時(shí)初始化一些servlet组底,如果在web.xml中的servlet標(biāo)簽之間加入load-startup 1
- 生命周期:
-
-
maven工具學(xué)習(xí)债鸡,重點(diǎn)關(guān)注如下問題
-
如何解決jar沖突
在項(xiàng)目中的pom文件中將沖突依賴排除厌均,具體寫法:比如我們要講一個(gè)依賴中的相應(yīng)jar包排除
<dependency> <groupId>com.xxx.xx</groupId> <artifactId>xxx</artifactId> <version>x</version> <exclusions> <exclusion> <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>
?
?
-
第四天
-
START
- 之前有過java web開發(fā)經(jīng)驗(yàn),對于servlet的生命周期以及基本開發(fā)過程有了解模她,但對于filter和listener了解不是很深侈净。對這些盲點(diǎn)進(jìn)行逐一攻破
- 對web.xml的所有常用的配置深入掌握(規(guī)范畜侦、原理)夏伊,對不常用的標(biāo)簽要有所了解
- 能夠準(zhǔn)確描述出servlet溺忧、filter鲁森、listener各自發(fā)揮的作用垄懂、生命周期草慧、加載順序等
- 使用filter漫谷、servlet、listener編寫一個(gè)動(dòng)態(tài)網(wǎng)頁小demo
- filter servlet listener:
- 初始化順序:listener -》filter -》servlet
- 銷毀順序:servlet- 》filter-》listener(和初始化順序相反)
-
web.xml
?
-
filter
- 定義:過濾器惕稻,對web服務(wù)器所管理的web資源:例如jsp俺祠、servlet、靜態(tài)文件等進(jìn)行攔截宋梧。例如實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問捂龄、過濾敏感詞匯
- 主要用于對
httpServletRequest
進(jìn)行預(yù)處理倦沧,也可以對httpServletResponse
進(jìn)行后處理。 - 完整流程:FIlter對用戶請求預(yù)處理--》servlet對請求進(jìn)行做出相應(yīng)--》FIlter在對相應(yīng)進(jìn)行后處理
filter鏈:在一個(gè)web應(yīng)用中告希,可能會(huì)有多個(gè)filter燕偶,這些filter 組合起來稱作filter鏈酝惧。filter的執(zhí)行順序根據(jù)filter在web.xml中定義的順序一致
filer 生命周期:和servlet一樣晚唇,filter的創(chuàng)建和銷毀由web容器負(fù)責(zé),當(dāng)web容器啟動(dòng)時(shí)葵礼,將創(chuàng)建filter實(shí)例對象鸳粉,調(diào)用init方法枯夜。filer對象只會(huì)創(chuàng)建一次,故filer是單例的摔吏。在多線程情況下會(huì)存在線程安全性問題,故不要在file類中定義屬性變量,最好是無狀態(tài)的诗箍,如果非要使用滤祖,一定要使用線程安全的類桑逝。比如并發(fā)包中的類。
filer的四種攔截方式:REQUEST 首昔、FORWORD寡喝、 INCLUDE、ERROE
REQUEST:直接訪問目標(biāo)資源
FORWORD:轉(zhuǎn)發(fā)
INCLUDE:例如:<jsp:include>
-
ERROR:web.xml中配置error-page時(shí)
可以在
filter-mapping
中添加多個(gè)dispatch子元素 filer用在哪:權(quán)限檢查勒奇、編碼過濾
如何使用filer:實(shí)現(xiàn)javax.servlet.Filer接口预鬓,并覆蓋doFilter方法
public class MyFilfer implements Filer{ @Override public void doFilter(ServletRequest srep, ServletResponse sresp, FilterChain fc) { //TODO } }
在web.xml中添加filter
<filter> <filter-name>myFilter</filter-name> <filer-class>MyFilfer</filer-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
?
-
servlet
- 生命周期:servlet實(shí)例的創(chuàng)建有兩個(gè)時(shí)機(jī):
- 客戶端第一次請求某個(gè)servlet時(shí),系統(tǒng)創(chuàng)建servlet的實(shí)例
- web應(yīng)用啟動(dòng)時(shí)立刻創(chuàng)建servlet 實(shí)例赊颠,需要在web.xml中配置
<load-on-startup>1(或大于1)</load-on-startup>
- 容器中只存在一個(gè)servlet實(shí)例格二。單例多線程的。故也是線程不安全
-
Demo :使用servlet 和 filter 實(shí)現(xiàn)登錄小程序
- filter 對用戶請求進(jìn)行攔截顶猜,驗(yàn)證是否登錄挠日。如果session有用戶信息郑原,則放過酸役。否則redirect到登錄頁面
- servlet 對登錄請求進(jìn)行處理奄薇,將用戶信息保存到session中
git分支地址:http://gitlab.alibaba-inc.com/shixu.sx/user_login/tree/master
-
問題解決
JVM性能調(diào)優(yōu)監(jiān)控常用命令
-
jps :列出jvm中正在運(yùn)行的進(jìn)程信息
-q 不輸出類名、Jar名和傳入main方法的參數(shù) -m 輸出傳入main方法的參數(shù) -l 輸出main類或Jar的全限名 -v 輸出傳入JVM的參數(shù) shixu.sx@$ jps -l 9520 sun.tools.jps.Jps 17924 org.apache.catalina.startup.Bootstrap 9812 org.jetbrains.jps.cmdline.Launcher 14184 14440 org.jetbrains.idea.maven.server.RemoteMavenServer
-
jstack: 主要用來查看某個(gè)java線程堆棧信息
場景:找出某個(gè)java 進(jìn)程中最耗費(fèi)cpu的java線程勺届,并定位堆棧信息
方案:
-
首先找出該java進(jìn)程的進(jìn)程id嗜湃,比如要找bootstrap進(jìn)程刚陡,
- 在windows環(huán)境下蝙云,命令行輸入:
jps | findstr "bootstrap"
- linux環(huán)境下唯灵,輸入:
jps | grep "bootstrap"
- 在windows環(huán)境下蝙云,命令行輸入:
-
根據(jù)進(jìn)程id,找出該進(jìn)程內(nèi)最耗費(fèi)資源的線程信息
命令行輸入:
top -Hp 進(jìn)程id
绝淡, 然后根據(jù)列出的線程信息找到time最長的線程id-
將線程id轉(zhuǎn)化為十六進(jìn)制,然后在命令行輸入
jstack 進(jìn)程id | grep 線程id對應(yīng)的十六進(jìn)制數(shù)
棵譬,根據(jù)打印出來的堆棧信息可以知道是哪個(gè)線程的問題
-
-
-
jmap: 用來查看堆內(nèi)存使用情況
使用
jmap -heap pid
查看進(jìn)程堆內(nèi)存使用情況。 -
jstat:jvm統(tǒng)計(jì)監(jiān)測工具
S0C、S1C阻肩、S0U、S1U:Survivor 0/1區(qū)容量(Capacity)和使用量(Used) EC擂仍、EU:Eden區(qū)容量和使用量 OC亿昏、OU:年老代容量和使用量 PC、PU:永久代容量和使用量 YGC依疼、YGT:年輕代GC次數(shù)和GC耗時(shí) FGC秘案、FGCT:Full GC次數(shù)和Full GC耗時(shí) GCT:GC總耗時(shí) 堆內(nèi)存 = 年輕代 + 年老代 + 永久代 年輕代 = Eden區(qū) + 兩個(gè)Survivor區(qū)(From和To)
查看網(wǎng)絡(luò)端口命令:
-
windows:
- 查看所有端口占用:
netstat -ano
- 查看指定端口占用:
netstat -ano | findstr "端口號(hào)"
- 查看所有端口占用:
-
linux:
- 查看所有端口占用:
netstat -anp
- 查看指定端口占用:
netstat -anp | grep "端口號(hào)"
- 查看所有端口占用:
?
第五天
-
9點(diǎn)半到10點(diǎn)半,學(xué)習(xí)代碼規(guī)約
-
問題:
-
規(guī)約中一條:避免在有鎖的代碼塊中調(diào)用RPC方法,為什么挣惰?
A:一般情況下珍语,鎖的粒度要越小越好凡辱,調(diào)用RPC本身就是一種粗粒度的處理,所以不建議放在同步代碼塊中再来。其次扳抽,RPC遠(yuǎn)程調(diào)用不確定性太多斜姥,比如運(yùn)行時(shí)間長、超時(shí)沧竟、事務(wù)回滾等铸敏,如果RPC方法需要運(yùn)行很長時(shí)間,那么該鎖會(huì)一直被占用悟泵,導(dǎo)致其他線程等待時(shí)間過長杈笔。
-
-
-
jvm
- jvm內(nèi)存區(qū)域
- pc寄存器:程序計(jì)數(shù)器,線程私有糕非,保存當(dāng)前線程執(zhí)行的字節(jié)碼地址蒙具,唯一一個(gè)沒有規(guī)定任何OOM的區(qū)域
- 虛擬機(jī)棧:線程私有,每個(gè)線程被創(chuàng)建時(shí)都會(huì)同時(shí)創(chuàng)建一個(gè)對應(yīng)的虛擬機(jī)棧朽肥,棧中存放著棧幀禁筏,每一個(gè)棧幀對應(yīng)一個(gè)方法調(diào)用。棧幀中保存局部變量表衡招、操作數(shù)棧篱昔、動(dòng)態(tài)鏈接等
- 方法區(qū):線程共享,大小可以動(dòng)態(tài)調(diào)整蚁吝,主要存放:類信息(名稱旱爆、方法、字段等元信息)窘茁、靜態(tài)變量怀伦。(注:jdk 8 之后方法區(qū)已經(jīng)不存在,取而代之的是metaspace山林,一塊本地內(nèi)存房待,由于類的元數(shù)據(jù)分配在本地內(nèi)存中,元空間的最大可分配空間就是系統(tǒng)可用內(nèi)存空間驼抹。)
- java堆:對象和數(shù)組都在這里分配空間桑孩。線程共享。垃圾回收的主要區(qū)域
- 垃圾回收算法回顧
- 遇到的問題
- 在JVM規(guī)范中規(guī)定框冀,如果線程執(zhí)行的是非native方法流椒,則程序計(jì)數(shù)器中保存的是當(dāng)前需要執(zhí)行的指令的地址;如果線程執(zhí)行的是native方法明也,則程序計(jì)數(shù)器中的值是undefined宣虾。為什么是undefined惯裕?如果是undefined的話,那么當(dāng)cpu再次切換執(zhí)行到該本地方法是绣硝,怎么找到要代碼行的地址蜻势?
- ?
-
maven 定義和相關(guān)命令回顧
項(xiàng)目管理和構(gòu)建自動(dòng)化工具
maven倉庫:
本地倉庫:第一次運(yùn)行maven構(gòu)建,會(huì)自動(dòng)下載所有依賴的jar文件到本地倉庫中鹉胖。它避免了每次構(gòu)建都引用遠(yuǎn)程倉庫的依賴文件
中央倉庫:maven社區(qū)提供握玛,不需要配置。
遠(yuǎn)程倉庫:如果maven在中央倉庫也找不到依賴的文件甫菠,會(huì)從用戶提供的遠(yuǎn)成倉庫中查找
maven依賴搜索順序:1. 本地倉庫 2. 中央倉庫 3. 遠(yuǎn)程倉庫 4. 都找不到挠铲,報(bào)錯(cuò)編譯失敗
創(chuàng)建工程:
命令:
mvn archetype:generate -DgroupId=com.companyname.helloworld -DartifactId=helloworld Dpackage=com.company.helloworld -Dversion=1.0-SNAPSHOT
- 構(gòu)建程序:
命令:
mvn package
- 安裝工程:
命令:
mvn install
(安裝到本地后,在本地倉庫會(huì)有該工程淑蔚,其他的項(xiàng)目可以依賴該工程)
- 生成文檔
命令:
mvn site
-
spring
控制翻轉(zhuǎn)和依賴注入:
bean作用域
bean生命周期
依賴注入方式
基于set方法
-
基于構(gòu)造方法
(二者優(yōu)劣)
AOP原理市殷,代理模式(動(dòng)態(tài)代理cglib和jdk代理區(qū)別)
事務(wù)管理(編程式事務(wù)和聲明式事務(wù))
demo小程序
-
總結(jié):
- 今天主要是對spring的基礎(chǔ)知識(shí)和核心概念,以及常用的配置等進(jìn)行了復(fù)習(xí)刹衫〈浊蓿回顧過程中發(fā)現(xiàn),很多知識(shí)點(diǎn)停留在會(huì)用的水平带迟,對底層實(shí)現(xiàn)不了解音羞。比如注解這一塊,jvm在加載類的時(shí)候遇到注解該怎么處理仓犬、注解是如何引入相應(yīng)的功能的嗅绰,對這些問題了解以后,還要思考如何自己定義一個(gè)注解搀继。周末要對這一點(diǎn)進(jìn)行深入剖析窘面。同時(shí)對于spring boot進(jìn)行系統(tǒng)學(xué)習(xí)。
第六天
-
上午和師傅以及徐瀟師兄一起探討了在瀏覽器輸入
www.alibaba.com
叽躯,之后發(fā)生的一切财边,結(jié)合自己對這個(gè)問題的認(rèn)識(shí),發(fā)現(xiàn)自己對阿里整個(gè)網(wǎng)絡(luò)體系以及服務(wù)架構(gòu)了解很不夠点骑。- 域名解析:瀏覽器dns緩存酣难、本地dns緩存、本地host文件黑滴、請求根dns服務(wù)器解析(查詢dns根域憨募,自頂向下進(jìn)行查詢)
- http連接:TCP三次握手,建立連接袁辈,客戶端與服務(wù)器
- 到達(dá)阿里負(fù)載均衡層(F5或者LVS菜谣,F(xiàn)5是硬件實(shí)現(xiàn)負(fù)載均衡,LVS針對傳輸層TCP\IP)
- VIPserver\vip
- 統(tǒng)一接入(HTTPS解密成HTTP,這是一個(gè)CPU密集型任務(wù)葛菇,在這里進(jìn)行處理可以降低下游服務(wù)器壓力)
- Tengin\apach\NGINX(負(fù)載均衡甘磨,應(yīng)用層負(fù)載均衡)
- 感想:對阿里的整體網(wǎng)絡(luò)架構(gòu)了解還很不夠,比如VIP和VIPserver在其中的具體作用眯停,CDN等如何實(shí)現(xiàn)加速,怎么更快解析DNS卿泽,如果找到一條更短的路由莺债,等等,這些點(diǎn)以后要一一弄明白签夭。
-
spring boot start
今天學(xué)習(xí)了spring boot齐邦,看了springboot的一些視頻,對spring boot有了一定的初步的認(rèn)識(shí)第租,初步了解了spring boot的一些基本理念措拇,如可以替換之前給予xml的配置,可以選用@configuration 和application.properties和application.yml來進(jìn)行配置spring bean慎宾。了解到了spring starters 丐吓,通過這個(gè)可以減少maven依賴中的版本不匹配問題。
spring boot的學(xué)習(xí)中趟据,通過運(yùn)行demo券犁,加深了對spring boot的理解,demo中集成了JPA汹碱。接下來會(huì)將springboot中加入其它start比如:mybatis粘衬、tddl等,進(jìn)行學(xué)習(xí)咳促。
感想:基于之前學(xué)習(xí)spring的基礎(chǔ)稚新,spring boot的學(xué)習(xí)整體順利。但目前對spring boot的理解更多的是在spring boot的使用上跪腹,并理解相關(guān)的看到的一些注解褂删,對spring boot的一些原理的還需要后面繼續(xù)深入。
- 三種啟動(dòng)方式:
- main方法中啟動(dòng)
- mvn:spring-boot:run
- mvn install 然后:java -jar 尺迂。笤妙。
- controller的使用
- @Controller:處理http請求
- @RestController = @Controller + @ResponseBody:Spring4之后新加的注解,原來返回json需要@ResponseBody配合@Controller
- @RequestMapping:配置url映射
- 獲取參數(shù)
- @PathVariable:獲取URL中的數(shù)據(jù)
- @RequestParam:獲取請求參數(shù)中的值
- @GetMapping@PostMapping:組合注解
- 三種啟動(dòng)方式:
第七天
- 今天主要對HSF進(jìn)行了學(xué)習(xí)噪裕。
在系統(tǒng)越來越復(fù)雜的情況下蹲盘,傳統(tǒng)的架構(gòu)會(huì)存在如下的問題:
- 各個(gè)模塊耦合度過高,導(dǎo)致升級(jí)更新困難膳音,一處變處處變
- 擴(kuò)展性差
- 團(tuán)隊(duì)開發(fā)困難
- 分布式部署非常困難
而HSF是一個(gè)遠(yuǎn)程RPC調(diào)用框架召衔。面向服務(wù),降低耦合性
- HSF:
通過配置provider和consumer的bean就ok祭陷。
provider暴露自己提供服務(wù)的接口苍凛,consumer根據(jù)接口進(jìn)行調(diào)用趣席。
返回的對象序列化后,通過網(wǎng)絡(luò)傳輸醇蝴。
感想:關(guān)于hsf宣肚,今天學(xué)習(xí)的內(nèi)容主要是對基本原理和基本概念進(jìn)行學(xué)習(xí),然后運(yùn)行了一個(gè)小demo悠栓,對服務(wù)的發(fā)布和服務(wù)的消費(fèi)進(jìn)行了簡單的實(shí)現(xiàn)霉涨。接下來還會(huì)更深入的學(xué)習(xí)。
- OCR識(shí)別的結(jié)果亂碼問題:
針對ocr識(shí)別的結(jié)果中文亂碼的問題惭适,我進(jìn)行了單元測試笙瑟,最后通過將亂碼內(nèi)容用
iso-8859-1
編碼方式轉(zhuǎn)化為字節(jié),然后再用utf-8
解碼癞志,解決了這個(gè)問題往枷。iso-8859-1
編碼方式是不支持中文的,所以當(dāng)對含有中文的內(nèi)容使用這種編碼方式進(jìn)行編碼的時(shí)候凄杯,再次解碼肯定會(huì)出現(xiàn)亂碼错洁。
因?yàn)閖ava本身是跨平臺(tái)的語言, 亂碼問題在java開發(fā)中非常常見盾舌,比如java的IO操作墓臭、數(shù)據(jù)庫、內(nèi)存妖谴、jav web等多種場景窿锉,而最終的問題就是出現(xiàn)在字節(jié)和字符的轉(zhuǎn)換上面。
- swift 報(bào)文格式
- AutoConfig
- SchedulerX
第八天
- 繼續(xù)學(xué)習(xí)HSF框架
通過看文檔膝舅,理解關(guān)于服務(wù)提供和服務(wù)的消費(fèi)過程:
- 服務(wù)提供者將提供的服務(wù)和自己的IP注冊至注冊中心ConfigServer
- ConfigServer會(huì)將服務(wù)提供者的IP列表推送至服務(wù)消費(fèi)者
- 服務(wù)消費(fèi)者發(fā)起調(diào)用時(shí)嗡载,直接從ConfigServer推送過來的服務(wù)提供者的IP列表中選擇一個(gè)IP發(fā)起遠(yuǎn)程調(diào)用
標(biāo)準(zhǔn)的service方式RPC:
- service 定義:基于OSGI的service定義方式
- 底層通信方式:萬變不離tcp\ip ,io方面使用異步NIO仍稀,并使用長連接
Provider和Consumer的啟動(dòng)和處理過程
- 初識(shí)TDDL
問題:單一數(shù)據(jù)庫無法滿足性能要求
- 數(shù)據(jù)切分
- 讀寫分離
- 系統(tǒng)容災(zāi)和主備切換以及運(yùn)維等問題
TDDL提供用戶訪問和數(shù)據(jù)庫之前的隔離洼滚,實(shí)現(xiàn)透明操作
1.直接提供分庫分表,讀寫分離技潘、主從備份等解決數(shù)據(jù)庫擴(kuò)展問題的功能.
2.基于配置模型構(gòu)建的包括數(shù)據(jù)庫在線擴(kuò)容遥巴、準(zhǔn)實(shí)時(shí)數(shù)據(jù)同步服務(wù)、運(yùn)維平臺(tái)等支撐系統(tǒng)享幽。
核心設(shè)計(jì):
- SQL解釋器 :語法樹铲掐、查詢匹配規(guī)則、分庫分表
- 查詢優(yōu)化器
- 執(zhí)行器
HSF原理
HSF架構(gòu)
HSF服務(wù)架構(gòu)主要幾塊組成:
- ConfigServer: 用于服務(wù)的注冊與發(fā)現(xiàn)值桩,server通過向ConfigServer注冊自己的服務(wù)摆霉,會(huì)在ConfigServer注冊自己的服務(wù)信息,如服務(wù)地址,發(fā)布的接口携栋,服務(wù)版本等內(nèi)容搭盾。client端可以從ConfigServer訂閱自己想要的服務(wù),之后ConfigServer就會(huì)把訂閱的服務(wù)的信息發(fā)送給client,之后client和server就可以建立連接婉支,進(jìn)行RPC調(diào)用了鸯隅。
- Diamond: 主要用于一些動(dòng)態(tài)的配置內(nèi)容,例如ConfigServer的地址向挖,路由匹配滋迈,動(dòng)態(tài)負(fù)載等配置。這些配置內(nèi)容户誓,可以通過在HSF服務(wù)治理網(wǎng)站上進(jìn)行配置。
- Redis:負(fù)責(zé)存儲(chǔ)HSF的元數(shù)據(jù)幕侠,consumer和provider隔一段時(shí)間會(huì)將調(diào)用信息進(jìn)行上報(bào)帝美,同時(shí)存儲(chǔ)了應(yīng)用名和服務(wù)映射等信息。
服務(wù)注冊發(fā)現(xiàn)流程
- Provider從Diamond中獲取Configserver的地址、類型等信息舞箍。
- Provider在Configserver上注冊自己的IP地址舰褪、端口號(hào)、服務(wù)名疏橄、版本號(hào)占拍、Group號(hào)信息。
- Provider定期將元數(shù)據(jù)(調(diào)用次數(shù)捎迫、服務(wù)狀態(tài)等等)上報(bào)給Redis晃酒,用于服務(wù)治理。
- Consumer從Diamond中獲取Configserver的地址窄绒、類型等信息贝次。
- Consumer根據(jù)服務(wù)名、版本號(hào)彰导、Group號(hào)信息向Configserver訂閱Provider服務(wù)蛔翅。
- Consumer定期將元數(shù)據(jù)(調(diào)用次數(shù)、服務(wù)狀態(tài)等等)上報(bào)給Redis位谋,用于服務(wù)治理山析。
- Configserver推送Provider的IP地址列表給Consumer。
- Consumer選擇一個(gè)IP地址倔幼,與該P(yáng)rovider建立長連接盖腿、通過RpcRequest和RpcResponse進(jìn)行調(diào)用。