# 闀垮畨閾炬晱鎹锋祴璇勪娇鐢ㄦ枃妗�

## 宸ュ叿绠€浠�

闀垮畨閾炬晱鎹锋祴璇勪富瑕佽礋璐e涓嬪姛鑳藉疄鐜帮細

- 閫氫俊缁勭綉鏂瑰紡楠岃瘉
- 闀垮畨閾炬€ц兘娴嬭瘯
- web鍓嶇鐣岄潰鏄剧ず

鈥�		鍖哄潡閾炬€ц兘娴嬭瘎鏄熀浜庨暱瀹夐摼2.3.0鐗堟湰瀹炵幇鐨勩€傜敤鎴峰湪鍓嶇椤甸潰閫夋嫨杈撳叆鍘嬫祴鍙傛暟锛岀敓鎴愭祴璇曠敤渚嬶紱鍚庣瀵硅緭鍏ュ弬鏁拌繘琛屽垎鏋愶紝鍚戝紩鎿庡彂甯冩祴璇曚换鍔★紝瀵规祴璇曚换鍔¤繘琛屽瓨鍌紱寮曟搸璋冪敤鍘嬫祴妗嗘灦杩涜鍘嬪姏娴嬭瘯锛屾湡闂磋皟鐢ㄥ悎绾﹁繍琛屾ā鍧楄繍琛屽悎绾︼紝璋冪敤瀵嗙爜娴嬭瘎妯″潡鍔ㄦ€佹姄鍙栨祦閲忓姩鎬侀獙璇侀暱瀹夐摼鍐呴儴浣跨敤鐨勫姞瀵嗙畻娉曚互鍙婇€氫俊鏂瑰紡锛涘湪鍘嬪姏娴嬭瘯缁撴潫鏃跺紩鎿庤皟鐢ㄦ寚鏍囪绠楁ā鍧楄绠楀帇娴嬬粨鏋滃苟鍚戝悗绔繑鍥炪€傚悗绔鍘嬫祴缁撴灉杩涜鏁版嵁缁熻锛屽皢缁熻鍚庣殑鏁版嵁杩涜瀛樺偍锛涘苟鍙戦€佽嚦鍓嶇锛涘墠绔〉闈㈠娴嬭瘯缁撴灉杩涜鍙鍖栧睍绀恒€�

闀垮畨閾炬晱鎹锋祴璇勬暣浣撴灦鏋勫涓嬪浘鎵€绀猴紝鍖呮嫭锛�

- 鍓嶇妯″潡
- 鍚庣妯″潡
- 浠诲姟璋冨害妯″潡
- 鎬ц兘娴嬭瘯銆佺粍缃戦獙璇佸紩鎿�
- 鏁版嵁瀛樺偍妯″潡

<div align=center>
<img loading="lazy" src="../images/Architecture-AgileTest.png" style="zoom:50%;" />
<center>闀垮畨閾炬晱鎹锋祴璇勬暣浣撴灦鏋勫浘</center>
</div>  

鈥�		鍓嶇妯″潡锛氬墠绔ā鍧楁槸鏅鸿兘鍚堢害瀹夊叏妫€娴嬬郴缁熺殑閲嶈缁勬垚閮ㄥ垎锛屽畠鎻愪緵浜嗘竻鏅扮編瑙傘€佺畝娲佸疄鐢ㄧ殑WEB鐣岄潰锛屼负鐢ㄦ埛鎻愪緵浜嗕究鎹风殑鎿嶄綔鏂瑰紡銆傚湪鍓嶇妯″潡涓紝鐢ㄦ埛鍙互杩涜韬唤淇℃伅鐨勭鐞嗭紝鍖呮嫭娉ㄥ唽銆佺櫥褰曘€佷慨鏀瑰瘑鐮佺瓑鎿嶄綔銆傚悓鏃讹紝鐢ㄦ埛鍙互涓婁紶鏅鸿兘鍚堢害鏂囦欢锛屽苟杩涜妫€娴嬩换鍔$殑绠$悊銆傚湪鍚堢害妫€娴嬩换鍔$鐞嗕腑锛岀敤鎴峰彲浠ユ煡鐪嬩换鍔$殑鎵ц鐘舵€併€佷换鍔$殑鎵ц缁撴灉绛変俊鎭€傚湪妫€娴嬩俊鎭殑鐣岄潰灞曠ず鏂归潰锛屽墠绔ā鍧楀彲浠ュ皢妫€娴嬬粨鏋滀互鍥捐〃銆佺綉缁滄嫇鎵戝浘绛夋柟寮忚繘琛屽睍绀猴紝鏂逛究鐢ㄦ埛杩涜鏌ョ湅鍜屽垎鏋愩€傛澶栵紝鍓嶇妯″潡杩樺叿鏈夎壇濂界殑鐢ㄦ埛浣撻獙锛屽畠鑳藉鏍规嵁鐢ㄦ埛鐨勬搷浣滆涓鸿繘琛屾櫤鑳芥彁绀猴紝鎻愰珮鐢ㄦ埛鐨勬搷浣滄晥鐜囥€傚悓鏃讹紝鍓嶇妯″潡杩樺叿鏈夎壇濂界殑鍙墿灞曟€э紝鍙互鏂逛究鍦拌繘琛屽姛鑳芥墿灞曞拰鐣岄潰瀹氬埗锛屼互婊¤冻涓嶅悓鐢ㄦ埛鐨勯渶姹傘€�

鈥�		鍚庣妯″潡锛氬悗绔ā鍧楁槸鏅鸿兘鍚堢害瀹夊叏妫€娴嬬郴缁熺殑鏍稿績缁勬垚閮ㄥ垎锛屽畠璐熻矗瀵圭郴缁熺殑涓氬姟閫昏緫杩涜澶勭悊锛屽苟涓哄墠绔ā鍧楁彁渚涘搴旂殑璋冪敤鎺ュ彛銆傚湪绯荤粺涓氬姟閫昏緫鏂归潰锛屽悗绔ā鍧椾富瑕佸寘鎷櫥褰曢壌鏉冦€佺敤鎴蜂俊鎭鐞嗐€佹祴璇曚俊鎭鐞嗗強娴嬭瘯缁撴灉澶勭悊绛夊姛鑳姐€傚湪鐧诲綍閴存潈鏂归潰锛屽悗绔ā鍧楀彲浠ュ鐢ㄦ埛杩涜韬唤楠岃瘉锛屼繚璇佺郴缁熺殑瀹夊叏鎬с€傚湪鐢ㄦ埛淇℃伅澶勭悊鏂归潰锛屽悗绔ā鍧楀彲浠ュ鐢ㄦ埛鐨勪俊鎭繘琛屽鍒犳敼鏌ョ瓑鎿嶄綔锛屼繚璇佺敤鎴蜂俊鎭殑瀹屾暣鎬у拰鍑嗙‘鎬с€傚湪鍚堢害淇℃伅澶勭悊鏂归潰锛屽悗绔ā鍧楀彲浠ュ涓婁紶鐨勫悎绾︽枃浠惰繘琛岃В鏋愬拰瀛樺偍锛屼互渚垮悗缁殑妫€娴嬪伐浣溿€傚湪鏁忔嵎娴嬭瘎妫€娴嬫柟闈紝鍚庣妯″潡鍙互灏嗘娴嬩换鍔′笅鍙戠粰妫€娴嬪紩鎿庯紝骞跺皢妫€娴嬬粨鏋滆繑鍥炵粰鍓嶇妯″潡銆�

鈥�		浠诲姟璋冨害妯″潡锛氫换鍔¤皟搴︽ā鍧楁槸鏁忔嵎娴嬭瘎绯荤粺鐨勯噸瑕佺粍鎴愰儴鍒嗭紝瀹冪敤浜庤繛鎺ヤ笟鍔¢€昏緫鍜屾娴嬪紩鎿庛€備换鍔¤皟搴︽ā鍧楅€氳繃娑堟伅闃熷垪鏉ュ疄鐜颁换鍔¤皟搴︼紝骞朵娇鐢ㄥ畾鏃朵换鍔¤繘琛岄┍鍔ㄣ€傚湪鏁忔嵎娴嬭瘎浠诲姟鐨勪笅鍙戞柟闈紝浠诲姟璋冨害妯″潡鍙互灏嗘娴嬩换鍔′笅鍙戠粰妫€娴嬪紩鎿庯紝骞剁洃鎺ф娴嬩换鍔$殑鎵ц鐘舵€併€傚湪妫€娴嬪紩鎿庢娴嬬粨鏋滅殑鍥炶皟鏂归潰锛屼换鍔¤皟搴︽ā鍧楀彲浠ュ皢妫€娴嬬粨鏋滃洖璋冪粰鍚庣妯″潡锛屽苟灏嗘娴嬬粨鏋滆繘琛屽瓨鍌ㄥ拰灞曠ず銆�

鈥�		妫€娴嬪紩鎿庯細涓昏鍖呮嫭闀垮畨閾炬€ц兘娴嬭瘯寮曟搸鍜岀粍缃戦獙璇佸紩鎿庛€傛€ц兘娴嬭瘯寮曟搸涓昏鍔熻兘鍖呮嫭璁捐鍘嬪姏娴嬭瘯鍦烘櫙銆佹墽琛屽帇鍔涙祴璇曚互鍙婅繘琛屾€ц兘鍒嗘瀽涓庝紭鍖栥€傜敤鎴峰彲浠ユ牴鎹疄闄呴渶姹傝缃苟鍙戣姹傛暟閲忋€佷氦鏄撶被鍨嬪拰棰戠巼绛夊弬鏁版潵璁捐鍚勭璐熻浇鎯呭喌涓嬬殑娴嬭瘯鍦烘櫙銆傞€氳繃妯℃嫙澶ч噺骞跺彂璇锋眰鍜屼氦鏄擄紝璇ユā鍧楀彲浠ュ闀垮畨閾捐繘琛屾€ц兘娴嬭瘯锛屽苟鎻愪緵鍝嶅簲鏃堕棿銆佸悶鍚愰噺銆佷氦鏄撴垚鍔熺巼绛夋寚鏍囩殑娴嬭瘯缁撴灉銆傜粍缃戦獙璇佸紩鎿庝富瑕佹牴鎹暱瀹夐摼鐨勯€氫俊鐗圭偣锛屽畬鎴愪竴娆″尯鍧楅摼缁勭綉閫氫俊鏂瑰紡楠岃瘉闇€瑕佸惎鍔ㄩ摼銆侀摼浜ゆ槗銆佷氦鏄撹繃绋嬩腑鎶撳彇娴侀噺骞惰В鏋愰獙璇侀暱瀹夐摼涓€氫俊缁勭綉鏂瑰紡銆傜洰鍓嶇増鏈殑鍖哄潡閾鹃€氫俊缁勭綉楠岃瘉鑳藉鏀寔鏍规嵁鎶撳彇鐨勬祦閲忚В鏋愬緱鍒伴€氫俊鑺傜偣鐨処P銆佺鍙e彿銆佽妭鐐笽D鍜岄€氫俊鍔犲瘑鏂瑰紡锛屽苟鏍规嵁閫氫俊鍏崇郴鏋勫缓缃戠粶鎷撴墤鍥俱€�

鈥�		鏁版嵁瀛樺偍妯″潡锛氭暟鎹瓨鍌ㄦā鍧楁槸鏁忔嵎娴嬭瘎绯荤粺鐨勯噸瑕佺粍鎴愰儴鍒嗭紝瀹冭礋璐e绯荤粺杩愯鐨勭浉鍏虫暟鎹繘琛屾寔涔呭寲锛屽寘鎷枃浠舵暟鎹殑瀛樺偍銆佸璞℃暟鎹瓨鍌ㄥ強鏁版嵁楂樻晥缂撳瓨绛夊姛鑳姐€傚湪鏂囦欢鏁版嵁鐨勫瓨鍌ㄦ柟闈紝鏁版嵁瀛樺偍妯″潡鍙互灏嗕笂浼犵殑鍚堢害鏂囦欢杩涜瀛樺偍锛屽苟瀵规枃浠惰繘琛岀储寮曞拰绠$悊锛屼互鏂逛究鍚庣画鐨勬娴嬪伐浣溿€傚湪瀵硅薄鏁版嵁瀛樺偍鏂归潰锛屾暟鎹瓨鍌ㄦā鍧楀彲浠ュ鐢ㄦ埛淇℃伅銆佸悎绾︿俊鎭€佹娴嬬粨鏋滅瓑鏁版嵁杩涜瀛樺偍鍜岀鐞嗭紝浠ヤ繚璇佹暟鎹殑瀹屾暣鎬у拰鍑嗙‘鎬с€傚湪鏁版嵁楂樻晥缂撳瓨鏂归潰锛屾暟鎹瓨鍌ㄦā鍧椾娇鐢ㄧ紦瀛樻妧鏈甯哥敤鏁版嵁杩涜缂撳瓨锛屼互鎻愰珮绯荤粺鐨勮闂€熷害鍜屽搷搴旇兘鍔涖€�

浜嗚В鎶€鏈粏鑺傦紝璇峰弬鑰僛闀垮畨閾炬晱鎹锋祴璇勬妧鏈枃妗(../tech/闀垮畨閾炬晱鎹锋祴璇勬妧鏈枃妗�.md)

##  鍓嶇

### 鎶€鏈€夊瀷

鈥�		鍚庣鎶€鏈細

鈥�		SpringBoot妗嗘灦锛氱敤浜庢瀯寤虹嫭绔嬨€佸彲鎵╁睍涓旈珮鏁堢殑Java搴旂敤绋嬪簭鐨勫紑婧愭鏋躲€傚畠鏄熀浜嶴pring妗嗘灦鐨勶紝閫氳繃鎻愪緵榛樿閰嶇疆鍜岃嚜鍔ㄥ寲鐨勮缃紝绠€鍖栦簡Spring搴旂敤绋嬪簭鐨勫紑鍙戣繃绋嬨€係pring Boot鏃ㄥ湪甯姪寮€鍙戣€呭揩閫熷湴鍒涘缓Spring搴旂敤绋嬪簭锛屼粠鑰岄檷浣庡紑鍙戣繃绋嬩腑鐨勫鏉傛€с€係pring Boot鎻愪緵浜嗗ぇ閲忕殑榛樿閰嶇疆锛屽噺灏戜簡寮€鍙戜汉鍛橀渶瑕佹墜鍔ㄩ厤缃殑宸ヤ綔銆傚唴缃簡Tomcat銆丣etty绛夊父鐢ㄧ殑Servlet瀹瑰櫒锛屽洜姝や綘鍙互灏嗗簲鐢ㄧ▼搴忕洿鎺ユ墦鍖呮垚涓€涓彲鎵ц鐨凧AR鏂囦欢锛屽苟浠ョ嫭绔嬬殑鏂瑰紡杩愯銆係pring Boot鍙互鏍规嵁浣犲湪椤圭洰涓坊鍔犵殑渚濊禆锛岃嚜鍔ㄧ鐞嗚繖浜涗緷璧栫殑鐗堟湰鍜屽啿绐佹彁渚涗簡Actuator妯″潡鍜岄泦鎴愭祴璇曟敮鎸侊細Spring Boot鎻愪緵浜嗕竴濂楃敤浜庣紪鍐欏拰鎵ц闆嗘垚娴嬭瘯鐨勫伐鍏峰拰娉ㄨВ锛屽府鍔╁紑鍙戜汉鍛樼紪鍐欓珮鏁堝彲闈犵殑娴嬭瘯銆�

鈥�		SpringCloud妗嗘灦锛氬熀浜嶴pring Boot鐨勫井鏈嶅姟鏋舵瀯寮€鍙戝伐鍏烽泦鍚堬紝鎻愪緵浜嗕竴绯诲垪鐨勫簱銆佸伐鍏峰拰缁勪欢锛岀畝鍖栦簡鏋勫缓鍜岀鐞嗗垎甯冨紡绯荤粺鐨勫鏉傛€с€傞€氳繃闆嗘垚鏈嶅姟娉ㄥ唽涓績锛堝Netflix Eureka銆丆onsul绛夛級锛屼娇鏈嶅姟鑳藉鑷姩娉ㄥ唽鍜屽彂鐜帮紝瀹炵幇浜嗘湇鍔′箣闂寸殑鍔ㄦ€侀€氫俊鍜岃礋杞藉潎琛°€傚苟鍙互闆嗘垚澶氱璐熻浇鍧囪 绠楁硶锛屽Ribbon锛屽府鍔╁湪鏈嶅姟涔嬮棿瀹炵幇璐熻浇鍧囪 锛屾彁楂樼郴缁熺殑鎬ц兘鍜屽彲鎵╁睍鎬с€係pring Cloud閫氳繃闆嗘垚RestTemplate鎴朏eign绛夊伐鍏凤紝绠€鍖栦簡鏈嶅姟涔嬮棿鐨勮繙绋嬭皟鐢ㄣ€係pring Cloud鎻愪緵浜嗗垎甯冨紡閰嶇疆绠$悊宸ュ叿锛屽Spring Cloud Config锛屽厑璁稿紑鍙戜汉鍛樺皢搴旂敤绋嬪簭鐨勯厤缃泦涓鐞嗭紝瀹炵幇閰嶇疆鐨勫姩鎬佹洿鏂板拰鐗堟湰鎺у埗銆傞€氳繃闆嗘垚Hystrix鍜孯esilience4j绛夊簱锛屾彁渚涗簡瀹归敊鏈哄埗锛屽府鍔╁簲瀵瑰垎甯冨紡绯荤粺涓殑鏁呴殰鍜屽紓甯革紝鎻愰珮绯荤粺鐨勫脊鎬у拰鍙潬鎬с€係pring Cloud鎻愪緵浜哯uul鍜孲pring Cloud Gateway绛夌綉鍏冲伐鍏凤紝鐢ㄤ簬瀵瑰鏆撮湶API骞惰繘琛岃矾鐢便€佽繃婊ゅ拰璁块棶鎺у埗绛夊姛鑳姐€傚苟闆嗘垚浜哯ipkin鍜孲leuth绛夊伐鍏凤紝鎻愪緵浜嗗垎甯冨紡杩借釜鍜岀洃鎺у姛鑳斤紝甯姪寮€鍙戜汉鍛樺畾浣嶅拰瑙e喅鍒嗗竷寮忕郴缁熶腑鐨勬€ц兘闂鍜屾晠闅溿€�

鈥�		鍓嶇鎶€鏈細

鈥�		Vue.js锛氭祦琛岀殑寮€婧怞avaScript妗嗘灦锛岀敤浜庢瀯寤虹敤鎴风晫闈€€傚畠涓撴敞浜庨€氳繃缁勪欢鍖栧拰鍝嶅簲寮忔暟鎹粦瀹氱殑鏂瑰紡鏉ユ瀯寤哄彲浜や簰鐨刉eb鐣岄潰銆俈ue.js閲囩敤浜嗗弻鍚戞暟鎹粦瀹氱殑鏈哄埗锛屽彲浠ュ皢鏁版嵁涓嶥OM鍏冪礌杩涜缁戝畾锛屼娇鏁版嵁鐨勫彉鍖栬兘澶熻嚜鍔ㄥ弽鏄犲埌鐣岄潰涓婏紝鍚屾椂鐢ㄦ埛鍦ㄧ晫闈笂鐨勬搷浣滀篃鍙互鍚屾鏇存柊鏁版嵁銆俈ue.js榧撳姳灏嗙晫闈㈡媶鍒嗕负澶氫釜鍙鐢ㄧ殑缁勪欢锛屾瘡涓粍浠惰礋璐h嚜宸辩殑涓€閮ㄥ垎鍔熻兘鍜屾牱寮忋€傚苟涓擵ue.js鐨勬牳蹇冨簱闈炲父杞婚噺绾э紝鏂囦欢浣撶Н灏忥紝鍔犺浇閫熷害蹇€俈ue.js鏀寔浣跨敤ES妯″潡鍜學ebpack绛夋瀯寤哄伐鍏疯繘琛屾ā鍧楀寲寮€鍙戙€傚紑鍙戜汉鍛樺彲浠ュ皢搴旂敤绋嬪簭鎷嗗垎涓哄涓ā鍧楋紝鎻愰珮浠g爜鐨勫彲缁存姢鎬у拰鍙祴璇曟€с€�

### 鍐呯疆鍔熻兘

鐢ㄦ埛绠$悊锛氱敤鎴锋槸绯荤粺鎿嶄綔鑰咃紝璇ュ姛鑳戒富瑕佸畬鎴愮郴缁熺敤鎴烽厤缃€�

鑿滃崟绠$悊锛氶厤缃郴缁熻彍鍗曪紝鎿嶄綔鏉冮檺锛屾寜閽潈闄愭爣璇嗙瓑銆�

瑙掕壊绠$悊锛氳鑹茶彍鍗曟潈闄愬垎閰嶃€佽缃鑹叉寜鏈烘瀯杩涜鏁版嵁鑼冨洿鏉冮檺鍒掑垎銆�

瀛楀吀绠$悊锛氬绯荤粺涓粡甯镐娇鐢ㄧ殑涓€浜涜緝涓哄浐瀹氱殑鏁版嵁杩涜缁存姢銆�

鏃ュ織绠$悊锛氱郴缁熸甯告搷浣滄棩蹇楄褰曞拰鏌ヨ锛涚郴缁熷紓甯镐俊鎭棩蹇楄褰曞拰鏌ヨ銆�

鐧诲綍鏃ュ織锛氱郴缁熺櫥褰曟棩蹇楄褰曟煡璇㈠寘鍚櫥褰曞紓甯搞€�

瀹氭椂浠诲姟锛氬湪绾匡紙娣诲姞銆佷慨鏀广€佸垹闄�)浠诲姟璋冨害鍖呭惈鎵ц缁撴灉鏃ュ織銆�

鍘嬪姏娴嬭瘯浠诲姟绠$悊锛氬唴缃悎绾﹀帇鍔涙祴璇曚换鍔$鐞嗭紝鍖呮嫭鏂板鍘嬪姏娴嬭瘯銆佷慨鏀瑰帇鍔涙祴璇曘€佸紑濮嬪帇鍔涙祴璇曘€佸帇鍔涙祴璇曠粨鏋滄煡鐪嬪姛鑳姐€佺綉缁滄嫇鎵戞煡鐪嬪姛鑳戒互鍙婂帇鍔涙祴璇曡繘搴︽煡鐪嬪姛鑳界瓑銆�

### **鐩綍缁撴瀯**

```
com.buptCM     
鈹溾攢鈹€ buptCM-ui              // 鍓嶇妗嗘灦 [80]
鈹溾攢鈹€ buptCM-gateway         // 缃戝叧妯″潡 [8080]
鈹溾攢鈹€ buptCM-auth            // 璁よ瘉涓績 [9200]
鈹溾攢鈹€ buptCM-api             // 鎺ュ彛妯″潡
鈹�       鈹斺攢鈹€ buptCM-api-system                          // 绯荤粺鎺ュ彛
鈹溾攢鈹€ buptCM-common          // 閫氱敤妯″潡
鈹�       鈹斺攢鈹€ buptCM-common-core                         // 鏍稿績妯″潡
鈹�       鈹斺攢鈹€ buptCM-common-datascope                    // 鏉冮檺鑼冨洿
鈹�       鈹斺攢鈹€ buptCM-common-datasource                   // 澶氭暟鎹簮
鈹�       鈹斺攢鈹€ buptCM-common-log                          // 鏃ュ織璁板綍
鈹�       鈹斺攢鈹€ buptCM-common-redis                        // 缂撳瓨鏈嶅姟
鈹�       鈹斺攢鈹€ buptCM-common-security                     // 瀹夊叏妯″潡
鈹�       鈹斺攢鈹€ buptCM-common-swagger                      // 绯荤粺鎺ュ彛
鈹溾攢鈹€ buptCM-modules         // 涓氬姟妯″潡
鈹�       鈹斺攢鈹€ buptCM-system                              // 绯荤粺妯″潡 
鈹�       鈹斺攢鈹€ buptCM-job                                 // 瀹氭椂浠诲姟 
鈹�       鈹斺攢鈹€ buptCM-file                                // 鏂囦欢鏈嶅姟
鈹溾攢鈹€ buptCM-visual          // 鍥惧舰鍖栫鐞嗘ā鍧�
鈹溾攢鈹€pom.xml                // 鍏叡渚濊禆
```

### 閮ㄧ讲鏂规

1銆佸噯澶囩幆澧�

- JDK\>=1.8锛堟帹鑽�1.8鐗堟湰锛�
- MySQL\>=5.7.0锛堟帹鑽�5.7鐗堟湰锛�
- Redis\>=3.0
- Maven\>=3.0
- Node\>=12
- Nacos\>=1.1.0锛坮uoyi-cloud\>=3.0.0闇€涓嬭浇Nacos\>=2.x.x鐗堟湰锛�
- Sentinel\>=1.6.0
- Nginx

娉ㄦ剰锛氱洰鍓峳uoyi鐨勭増鏈潎瓒呰繃3.0锛屾帹鑽愪娇鐢╪acos鐨勭ǔ瀹氱増鏈€斺€攏acos2.0.3

2 銆丯ginx 瀹夎閮ㄧ讲

锛�1锛変笅杞藉湴鍧€

鍦板潃[http://nginx.org/en/download.html](http://nginx.org/en/download.html),

锛�2锛夎В鍘嬪畨瑁呭寘

```shell
tar xzf nginx-1.20.2.tar.gz #瑙e帇鏂囦欢澶癸紝鐗堟湰涓轰笅杞界殑鍏蜂綋鐗堟湰
mv nginx-1.20.2 /user/local/nginx #绉诲姩鐩綍
```

锛�3锛夊畨瑁卬ginx

```shell
cd /user/local/nginx #杩涘叆nginx鐩綍
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf #妫€娴嬪畨瑁呭钩鍙扮殑鐩爣鐗瑰緛
```

甯歌浼氱己灏慻cc銆亃lib銆丳CRE渚濊禆锛屽彲浣跨敤涓嬮潰涓変釜鍛戒护瀹夎渚濊禆

```shell
yum install -y gcc;
yum install -y pcre pcre-devel;
yum install -y zlib zlib-devel
```

锛�4锛夌紪璇憂ginx

configure鍛戒护鎴愬姛涔嬪悗锛岃緭鍏ュ懡浠make`锛岀紪璇憂ginx鐩綍锛沵ake鎴愬姛锛屾渶鍚庤緭鍏ュ懡浠make install /usr/local/nginx/`瀹夎nginx銆�

锛�5锛夊惎鍔╪ginx

```shell
cd /usr/local/nginx/sbin/ #杩涘叆nginx鐨剆bin鐩綍
./nginx -c /usr/local/nginx/conf/nginx.conf #鍚姩鍛戒护
```

锛�8锛夊鍒禿ist鍖呭埌鎸囧畾鐩綍

锛�9锛変慨鏀筺ginx閰嶇疆

```shell
vim nginx.conf #杩涘叆/usr/local/nginx/conf
./nginx -s reload #淇濆瓨閰嶇疆鏂囦欢鍚庯紝閲嶅惎
```

鈥�		鎵撳紑娴忚鍣紝杈撳叆鏈嶅姟鍣ㄤ笂瀵瑰簲鐨刬p鍦板潃鍜岀鍙e嵆鍙湅瑙侀〉闈€€�

3銆丮ySQL

锛�1锛夋媺鍙栭暅鍍�

```shell
docker pull mysql:5.7
```

锛�2锛夋煡鐪嬪綋鍓嶆墍鏈夌殑闀滃儚

```shell
docker image ls
```

锛�3锛夊垱寤哄苟鍚姩涓€涓鍣�

```shell
docker run --name test-mysql -e MYSQL\_ROOT\_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
```

- `-name`: 缁欐柊鍒涘缓鐨刐瀹瑰櫒](https://cloud.tencent.com/product/tke?from=20065&from_column=20065)鍛藉悕锛屾澶勫懡鍚嶄负`test-mysql`
- `-e`: 閰嶇疆淇℃伅锛屾澶勯厤缃� [MySQL](https://cloud.tencent.com/product/cdb?from=20065&from_column=20065)鐨� root 鐢ㄦ埛鐨勭櫥褰曞瘑鐮�
- `-p`: 绔彛鏄犲皠锛屾澶勬槧灏勪富鏈虹殑3306绔彛鍒板鍣╜test-mysql`鐨�3306绔彛
- `-d`: 鎴愬姛鍚姩鍚屾湡鍚庤緭鍑哄鍣ㄧ殑瀹屾暣ID

锛�4锛夋煡鐪嬪鍣ㄨ繍琛岀姸鎬�

```shell
docker ps
```

锛�5锛夎繘鍏ュ鍣�

```shell
docker exec -it test-mysql /bin/bash
```

锛�6锛夎繛鎺� MySQL

```shell
鍙互閫氳繃宸ュ叿鐩存帴杩炴帴鏈嶅姟鍣ㄧ殑3306绔彛

涔熷彲浠ヨ繘鍏ュ鍣紝鐒跺悗閫氳繃mysql -u root -p杩炴帴
```

锛�7锛夊惎鍔ㄥ涓� mysql 瀹瑰櫒

```shell
docker run --name test2-mysql -e MYSQL\_ROOT\_PASSWORD=123456 -p 6666:3306 -d mysql
```

4銆丷edis

锛�1锛夋媺鍙朢edis

```shell
docker pull redis:3.0.5
```

锛�2锛夋煡鐪嬫湰鍦伴暅鍍�

```shell
docker images
```

锛�3锛夎繍琛屽鍣�

```shell
docker run -itd --name redis-test -p 6379:6379 redis
```

5銆乶acos

锛�1锛夋媺鍙栭暅鍍�

```shell
docker pull nacos/nacos-server:v2.0.3
```

锛�2锛夊垱寤烘槧灏勫鍣ㄧ殑鏂囦欢鐩綍

```shell
mkdir -p /mydata/nacos/logs/ #鍒涘缓logs鐩綍
mkdir -p /mydata/nacos/conf/ #鍒涘缓閰嶇疆鏂囦欢鐩綍
# 鎺堜簣鏉冮檺
chmod 777 /mydata/nacos/logs
chmod 777 /mydata/nacos/conf
```

锛�3锛夊垱寤簄acos\_config鏁版嵁搴�

鈥�		nacos浣跨敤2.0.3鐗堟湰鍚庯紝鍒涘缓鐨勬暟鎹簱鐢�"nacos"鍙樹负"nacos\_config"锛岄渶瑕佹墜鍔ㄥ垱寤烘暟鎹簱锛岃繘鍏ysql浣跨敤濡備笅SQL璇彞锛�

```mysql
CREATE DATABASE `nacos_config` DEFAULT CHARACTER SET utf8mb4;
 # 杩欓噷鐨勬暟鎹簱鍚嶇О浣跨敤浜嗗叧閿瓧config锛屾墍浠ヨ浣跨敤``瀵规暟鎹簱鍚嶇О杩涜鍖呭洿锛屽悗闈㈠湪鍒涘缓ry-config绛夋暟鎹簱鏃朵篃闇€瑕佸悓鏍风殑鎿嶄綔锛屽惁鍒欐棤娉曞垱寤烘垚鍔熴€�
```

锛�4锛夋墽琛孲QL璇彞锛屼负nacos\_config娣诲姞鏁版嵁琛�

鈥�		SQL鏂囦欢浣嶇疆锛歔涓嬭浇浣嶇疆]/nacos/conf/nacos-mysql.sql

鈥�		杩涘叆mysql鍚庯紝浣跨敤濡備笅鍛戒护鎵цSQL鏂囦欢锛�

```mysql
mysql> source [涓嬭浇浣嶇疆]/nacos/conf/nacos-mysql.sql
```

锛�5锛変慨鏀筧pplication.properties鏂囦欢

鈥�		鑷閰嶇疆db鏁版嵁婧愶紝璐﹀彿瀵嗙爜锛屽皢nacos涓巑ysql鏁版嵁搴撹繘琛岃繛鎺ワ紝鍏蜂綋淇敼鍐呭濡備笅锛�

```shell
# 鍙栨秷涓嬮潰鍐呭鐨勬敞閲�
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos\_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=鑷繁鐨勭敤鎴峰悕
db.password=鑷繁鐨勫瘑鐮�
```

锛�6锛夊懡浠よ鍚姩nacos

鈥�	杩愯/nacos/bin/startup.sh鑴氭湰鍚姩鏈嶅姟

鈥�	浣跨敤濡備笅鍛戒护鍦ㄥ崟浣撶姸鎬佷笅鍚姩nacos锛堥泦缇ゆā寮忓惎鍔ㄤ細鎶ラ敊锛�

```shell
# 閫傜敤浜巆entos
sh startup.sh -m standalone
# 閫傜敤浜嶶bantu
bash startup.sh -m standalone
# 涓嶅悓鐨勬搷浣滅郴缁熸墽琛岃剼鏈殑鍛戒护涓嶇浉鍚岋紝闇€瑕佹敞鎰忓尯鍒�
```

锛�7锛夊垱寤虹浉搴旀暟鎹簱

鈥�		鍒涘缓鏁版嵁搴搑y-cloud骞跺鍏ユ暟鎹剼鏈瑀y\_2021xxxx.sql锛堝繀椤伙級锛宷uartz.sql锛堝彲閫夛級锛�

鈥�		鍒涘缓鏁版嵁搴搑y-config骞跺鍏ユ暟鎹剼鏈瑀y\_config\_2021xxxx.sql锛堝繀椤伙級锛�

鈥�		浠ヤ笂鏂囦欢鍧囧湪ruoyi浠g爜鏂囦欢澶逛腑鐨剆ql鏂囦欢澶逛腑锛屼负淇濊瘉缂栫爜姝g‘锛屽缓璁湪sql鏂囦欢涓坊鍔犲涓嬭鍙ワ紝鎸夌収鎸囧畾缂栫爜鑷姩鍒涘缓鐩稿簲鏁版嵁搴撱€�

- 鍒涘缓ry-cloud鏁版嵁搴擄紙灏嗘湰閮ㄥ垎鍔犲湪瀵瑰簲SQL鏂囦欢鐨勫墠绔級

```mysql
DROP DATABASE IF EXISTS `ry-cloud`;
CREATE DATABASE `ry-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4\_general\_ci;
SET NAMES utf8mb4;
USE `ry-cloud`;
```

- 鍒涘缓ry-config鏁版嵁搴�

```mysql
DROP DATABASE IF EXISTS `ry-config`;
CREATE DATABASE `ry-config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4\_general\_ci;
SET NAMES utf8mb4;
USE `ry-config`;
```

锛�8锛変慨鏀归厤缃枃浠�

鈥�		淇敼application.properties鏂囦欢锛屼慨鏀规枃浠朵腑鏈夊叧鏁版嵁搴撶殑閰嶇疆锛屽皢ruoyi鎵€闇€瑕佺殑閰嶇疆鏂囦欢淇℃伅鍔犺浇鍒皀acos涓紝鍏蜂綋淇敼鍐呭濡備笅锛�

```properties
# 鍙栨秷涓嬮潰鍐呭鐨勬敞閲�
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=鑷繁鐨勭敤鎴峰悕
db.password=鑷繁鐨勫瘑鐮�
```

锛�9锛変慨鏀归厤缃腑鏈夊叧绔彛鍙枫€両P鍦板潃淇℃伅

```
# 淇敼3306绔彛鍙�
buptCM-chainmaker-dev.yml
buptCM-gen-dev.yml
buptCM-job-dev.yml
buptCM-practice-dev.yml
buptCM-smartcontract-dev.yml
buptCM-stresstest-dev.yml
buptCM-system-dev.yml
```



```
# 淇敼IP
buptCM-auth-dev.yml
buptCM-chainmaker-dev.yml
buptCM-file-dev.yml
buptCM-gateway-dev.yml
buptCM-gen-dev.yml
buptCM-job-dev.yml
buptCM-practice-dev.yml
```

### 绯荤粺绀烘剰鍥�

<div align=center>
<img loading="lazy" src="../images/Login-PerformanceTest.png" style="zoom:50%;" />
<center>鐧诲綍椤甸潰</center>
</div>  

<div align=center>
<img loading="lazy" src="../images/LogInfo-PerformanceTest.png" style="zoom:50%;" />
<center>鏃ュ織灞曠ず椤甸潰</center>
</div>  

<div align=center>
<img loading="lazy" src="../images/Contract-Buildin-PerformanceTest.png" style="zoom:50%;" />
<center>鍐呯疆鍚堢害娴嬭瘯椤甸潰</center>
</div>  


## 鎬ц兘娴嬭瘯

### 姒傝堪

<div align=center>
<img loading="lazy" src="../images/PerformanceTest.png" style="zoom:50%;" />
<center>鎬ц兘娴嬭瘯</center>
</div> 

鈥�		濡備笂鍥炬墍绀猴紝闀垮畨閾炬€ц兘娴嬭瘎涓昏璐熻矗浠ヤ笅鍔熻兘瀹炵幇锛�

- 鐢辨暟鎹鐞嗘ā鍧楁姄鍙栨祴璇曚换鍔″苟鎵ц鑾峰緱涓ょ被閰嶇疆鏂囦欢锛屽叾涓竴绫荤敤浜庝笌鐩爣鐨勫尯鍧楅摼缃戠粶寤虹珛杩炴帴锛屽彟涓€绫荤敓鎴愭湰娆℃祴璇曚换鍔$殑鍘嬫祴鍙傛暟锛屽苟杈撳叆鍒板帇娴嬫ā鍧楋紱
- 鍘嬫祴妯″潡璐熻矗閫氳繃妯℃嫙娴嬭瘯鐢ㄤ緥鐢熸垚鐪熷疄浜ゆ槗锛屽紓姝ュ悜鐩爣鍖哄潡閾捐妭鐐瑰彂閫佷氦鏄擄紝鎵ц鍘嬫祴浠诲姟銆�
- 鍚屾椂鍚姩娑堟伅璁㈤槄妯″潡瀹炴椂璁㈤槄鍖哄潡閾剧綉缁滀骇鐢熺殑浜ゆ槗淇℃伅锛屽苟鍦ㄤ氦鏄撳畬鎴愭椂杩斿洖缁撴灉缁欐寚鏍囪绠楁ā鍧椼€�
- 鎸囨爣璁$畻妯″潡鏍规嵁鐩稿簲鐨勬祴璇曚换鍔″尮閰嶅搴旂殑鎸囨爣骞惰繘琛岃绠楋紝杩斿洖璇ユ祴璇曚换鍔$殑娴嬭瘯缁撴灉銆�

###  鏁翠綋娴佺▼

<div align=center>
<img loading="lazy" src="../images/WorkFlow-PerformanceTest.png" style="zoom:50%;" />
<center>鏁翠綋娴佺▼</center>
</div>

鎬ц兘娴嬭瘯鏂瑰紡楠岃瘉娴佺▼濡備笂鍥炬墍绀猴細

- 浠庝换鍔¢槦鍒楅噷鑾峰彇鍒板帇娴嬩换鍔°€傛牴鎹祴璇曚换鍔′腑鏁版嵁鏋勯€犲疄闄呴渶姹傝璁″悇绉嶈礋杞芥儏鍐典笅鐨勬祴璇曞満鏅紝鏋勯€犲苟鍙戣姹傛暟閲忋€佷氦鏄撶被鍨嬨€佷氦鏄撻鐜囩瓑鍙傛暟浠ユā鎷熺湡瀹炵殑浣跨敤鎯呭喌锛岀敓鎴愬帇娴嬩换鍔★紝骞剁敱鍘嬫祴妯″潡鎵ц銆�
- 鍚姩娑堟伅璁㈤槄鏈哄埗璁㈤槄浜ゆ槗淇℃伅銆傞€氳繃璁㈤槄浜ゆ槗淇℃伅锛屾秷鎭闃呮ā鍧楀彲浠ュ疄鏃惰幏鍙栦氦鏄撶殑鐘舵€併€佸搷搴旀椂闂寸瓑鍏抽敭鎸囨爣銆傝繖浜涗俊鎭浜庤瘎浼伴暱瀹夐摼鍦ㄥ帇鍔涗笅鐨勬€ц兘琛ㄧ幇闈炲父閲嶈銆�
- 鍦ㄦ秷鎭闃呮満鍒舵彁绀轰氦鏄撲换鍔$粨鏉熷悗锛屾寚鏍囪绠楁ā鍧楀彲浠ラ€氳繃鏀堕泦鍒扮殑浜ゆ槗淇℃伅璁$畻鍑哄搷搴旀椂闂淬€佸悶鍚愰噺銆佷氦鏄撴垚鍔熺巼绛夋寚鏍囥€傝繖浜涙寚鏍囧彲浠ュ弽鏄犲嚭闀垮畨閾惧湪楂樿礋杞芥儏鍐典笅鐨勬€ц兘琛ㄧ幇銆傞€氳繃璁$畻鐩稿簲鎸囨爣锛岀敤鎴峰彲浠ヨ瘎浼伴暱瀹夐摼鐨勭ǔ瀹氭€с€佸彲鎵╁睍鎬у拰鍚炲悙閲忥紝骞剁‘瀹氭€ц兘鐡堕鎵€鍦ㄣ€�

###  鎺ュ彛璇存槑

####  DownConfigAndLoad

API浠嬬粛
		璇PI鐢ㄤ簬浠庢寚瀹氱殑鏈嶅姟鍣ㄤ笅杞介暱瀹夐摼鐨勯厤缃枃浠讹紝骞跺姞杞藉埌鍘嬫祴寮曟搸鐨勫埗瀹氱洰褰曚笅锛屾柟渚垮悗缁娇鐢ㄣ€�  

杈撳叆 

- host锛宻tring锛屾湇鍔″櫒鍦板潃銆�  
- port锛宨nt64锛屾湇鍔″櫒绔彛鍙枫€�  
- username锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勭敤鎴峰悕銆�  
- password锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勫瘑鐮併€�  
- configFile锛宻tring锛岄渶瑕佷笅杞界殑閰嶇疆鏂囦欢鍚嶃€�   

杈撳嚭
		path锛宻tring锛屼笅杞界殑閰嶇疆鏂囦欢鍦ㄥ帇娴嬪紩鎿庝腑鐨勮矾寰勩€�  

####  GenerateConstConfig  

API浠嬬粛
		璇PI鐢ㄤ簬鐢熸垚鍘嬫祴鍙傛暟閰嶇疆鏂囦欢锛屽寘鎷悎绾﹀嚱鏁般€佸悎绾﹀悕绉般€佸悎绾︾被鍨嬨€佽繍琛屾椂绫诲瀷銆佸帇娴嬫椂闂淬€佸惊鐜鏁般€佺潯鐪犳椂闂淬€佺嚎绋嬫暟绛夈€�  

杈撳叆
- model锛宻tring锛岄暱瀹夐摼鐨勯厤缃摼妯″紡锛屽寘鎷琍ermissionWithCert銆丳ermissionWithKey銆丳ublic锛屼笁绉嶆ā寮忚瑙侀暱瀹夐摼鏂囨。銆� 
- contractFunction锛宻tring锛屾櫤鑳藉悎绾﹀嚱鏁板悕绉般€� 
- contractName锛宻tring锛屾櫤鑳藉悎绾﹀悕绉般€� 
- runTimeType锛宻tring锛屾櫤鑳藉悎绾﹁瑷€绫诲瀷锛岃瑙侀暱瀹夐摼鏂囨。銆� 
- allParams锛宻tring锛岃繍琛屾櫤鑳藉悎绾︽椂鎵€闇€瑕佺殑鍙傛暟锛屽悇涓弬鏁伴棿浣跨敤鈥渱|鈥濋棿闅旓紝鍙傛暟鍐呮牸寮忎负鈥滃弬鏁板悕锛氬弬鏁板唴瀹光€� 
- climbTime锛宨nt锛岀嚎绋嬬埇鍧℃椂闂淬€� 
- loopNum锛宨nt锛屽惊鐜鏁般€� 
- sleepTime锛宨nt锛岀潯鐪犳椂闂淬€� 
- threadNum锛宨nt锛屽苟鍙戠嚎绋嬫暟銆� 

杈撳嚭
	path锛宻tring锛岀敓鎴愮殑鍘嬫祴鍙傛暟閰嶇疆鏂囦欢鍦ㄥ帇娴嬪紩鎿庝腑鐨勮矾寰勩€� 

####  GenerateSdkConfig 
API浠嬬粛
		璇PI鐢ㄤ簬鐢熸垚涓庨暱瀹夐摼寤虹珛杩炴帴鐨凷DK閰嶇疆鏂囦欢銆�
杈撳叆

- model锛宻tring锛岄暱瀹夐摼鐨勯厤缃摼妯″紡锛屽寘鎷琍ermissionWithCert銆丳ermissionWithKey銆丳ublic锛屼笁绉嶆ā寮忚瑙侀暱瀹夐摼鏂囨。銆� 
- hostList锛孾]string锛岄渶瑕佸姞鍘嬬殑涓绘満IP鍦板潃鍒楄〃銆� 
- grpcList锛孾]string锛岄渶瑕佸姞鍘嬬殑涓绘満鍒楄〃瀵瑰簲鐨刧RPC绔彛鍒楄〃銆� 
- connCnt锛宨nt锛屽崟浣嶆椂闂村唴鍚戦暱瀹夐摼鍙戦€佺殑浜ゆ槗瀵规暟閲忋€�  

杈撳嚭
	path锛宻tring锛岀敓鎴愮殑SDK閰嶇疆鏂囦欢鍦ㄥ帇娴嬪紩鎿庝腑鐨勮矾寰勩€� 

#### GenerateClientConfig   

API浠嬬粛

鈥�		璇PI鐢ㄤ簬鐢熸垚鍘嬪姏娴嬭瘯鑺傜偣鏁扮洰鐨勯厤缃枃浠躲€�

杈撳叆

- nodeNum锛宨nt锛屽帇鍔涙祴璇曡妭鐐规暟鐩€�

杈撳嚭

鈥�	ClientsSavePath锛宻tring锛岀敓鎴愮殑clients閰嶇疆鏂囦欢鍦ㄥ帇娴嬪紩鎿庝腑鐨勮矾寰勩€� 

#### processPressureTest 
API浠嬬粛
		璇PI鏍规嵁鍑嗗濂界殑閰嶇疆鏂囦欢瀵圭洰鏍囬摼杩涜鍘嬫祴銆� 
杈撳叆

鈥�		鏃狅紝浣跨敤3.3.1锛�3.3.2锛�3.3.3鍑嗗濂界殑閰嶇疆鏂囦欢銆� 
杈撳嚭
鈥�		PressureTestResult鍘嬫祴缁撴灉锛屽寘鎷氦鏄撴暟銆佹垚鍔熶笂閾炬暟銆乀PS銆丆TPS銆丵TPS銆�

###  鍩烘湰浣跨敤

```go
func main() {
    //涓嬭浇闀垮畨閾� config鏂囦欢骞舵斁鍒� build鐩綍涓�
    DownConfigAndLoad("10.112.66.243"锛�22锛�"root"锛�"123456"锛�"/home/csx/FilePool/2023/05/01/config_20230501095737A006.zip " 锛�"\\")
    // 鐢熸垚鍘嬫祴鍙傛暟閰嶇疆鏂囦欢
    GenerateConstConfig ("PermissionWithCert", "P","T", "DOCKER_GO", 5, 100, 100, 100)
    // 琚帇娴嬫椂鐩爣闀垮畨閾惧拰瀵瑰簲鐨刧rpc绔彛
    hostList :=[]string{"10.112.25.201","10.112.25.201","10.112.25.201","10.112.25.201"}
	grpc1List :=[]string{"12031","12032","12033","12034"}
    // 鐢熸垚涓庨暱瀹夐摼寤虹珛杩炴帴鐨凷DK閰嶇疆鏂囦欢
    GenerateSdkConfig (hostList,grpc1List,"PermissionWithCert")
    // 鏍规嵁鍑嗗濂界殑閰嶇疆鏂囦欢瀵圭洰鏍囬摼杩涜鍘嬫祴
    result = PressureTestResult()
    // 杈撳嚭缁撴灉
    fmt.Println(result)
}
```


## 缁勭綉鏂瑰紡

### 姒傝堪

<div align=center>
<img loading="lazy" src="../images/WorkFlow-PerformanceTest-Net.png" style="zoom:50%;" />
<center>缁勭綉鏂瑰紡</center>
</div>

濡備笂鍥炬墍绀猴紝缁勭綉鏂瑰紡寮曟搸涓昏璐熻矗浠ヤ笅鍔熻兘瀹炵幇锛�

- 鎺ユ敹鍓嶇娴嬭瘯鐢ㄤ緥瑙f瀽骞跺惎鍔ㄥ紩鎿�

- 鎶撳彇鏈嶅姟鍣ㄦ寚瀹氱鍙f祦閲忎繚瀛樺埌瀹㈡埛鏈�
- 瑙f瀽娴侀噺鍖呭緱鍒板搴旂殑閫氫俊鑺傜偣淇℃伅
- 瑙f瀽缁撴灉閫氳繃娑堟伅闃熷垪鍙嶉缁欏墠绔�

### 鏁翠綋娴佺▼

<div align=center>
<img loading="lazy" src="../images/WorkFlow-AgileTest.png" style="zoom:50%;" />
<center>鏁翠綋娴佺▼</center>
</div>

鍖哄潡閾鹃€氫俊缁勭綉鏂瑰紡楠岃瘉娴佺▼濡備笂鍥炬墍绀猴細

- 鐢ㄦ埛鍚戝紩鎿庡彂閫佽姹備互楠岃瘉鍖哄潡閾剧殑缁勭綉鏂瑰紡銆傝璇锋眰鍖呭惈浜嗚杩愯鐨勫悎绾︿互鍙婅緭鍑哄帇鍔涘弬鏁扮瓑淇℃伅銆傚紩鎿庢帴鏀跺埌璇锋眰鍚庯紝涓嬭浇骞惰繍琛岀浉搴旂殑鍚堢害銆�
- 鎹曡幏鐗瑰畾绔彛鐨勬祦閲忥紝浣跨敤tcpdump宸ュ叿锛屽苟灏嗘姄鍙栧埌鐨勬祦閲忎繚瀛樹负绂荤嚎鏂囦欢骞禿ump鍒版湰鍦板鎴锋満锛屼互渚垮悗缁垎鏋愩€�
- 浣跨敤gopacket搴撴潵鍒嗘瀽绂荤嚎鐨勬祦閲忔枃浠讹紝鍙互鎻愬彇闀垮畨閾鹃€氫俊鑺傜偣鐨処P鍦板潃銆佺鍙e彿銆佽妭鐐笽D浠ュ強閫氫俊鎵€閲囩敤鐨勫姞瀵嗘柟寮忕瓑淇℃伅銆�
- 灏嗗垎鏋愬緱鍒扮殑缁撴灉鍙嶉鍒板墠绔紝鍓嶇鏍规嵁閫氫俊鍏崇郴鐢熸垚鐩稿簲鐨勭綉缁滄嫇鎵戝浘锛屽睍绀哄尯鍧楅摼涓殑鑺傜偣涔嬮棿鐨勮繛鎺ュ叧绯汇€�

### **鎺ュ彛璇存槑**

```go
// SourceInfo 鑺傜偣婧愪俊鎭�
type SourceInfo struct {
    Ip string `json:"Ip"`
    Port string `json:"Port"`
    Nodeid string `json:"Nodeid"`
}
// DestInfo 鐩爣鑺傜偣淇℃伅
type DestInfo struct {
    Ip string `json:"Ip"`
    Port string `json:"Port"`
    Protocol string `json:"Protocol"`
    Cryptoversion string `json:"Cryptoversion"`
    Nodeid string `json:"Nodeid"`
}
```

#### catchTraffic

API 浠嬬粛

鈥�		璇PI鎺ユ敹鏈嶅姟鍣ㄨ缁嗕俊鎭互鍙婂緟鎶撳彇鏈嶅姟鍣ㄧ鍙e彿锛屽湪闀垮畨閾惧惎鍔ㄦ椂鎶撳彇鎸囧畾璇ユ湇鍔″櫒鐗瑰畾绔彛缁勭綉娴侀噺骞朵笅杞藉埌瀹㈡埛鏈�

杈撳叆

- host锛宻tring锛屾湇鍔″櫒鍦板潃銆�
- port锛宨nt64锛屾湇鍔″櫒绔彛鍙�
- username锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勭敤鎴峰悕
- password锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勫瘑鐮�
- catch, int64,鏈嶅姟绔姄鍙栨祦閲忕鍙�

杈撳嚭

鈥�	path锛宻tring锛屾姄鍙栫殑娴侀噺鍦ㄥ鎴锋満涓繚瀛樼殑璺緞

#### analyseTraffic

API 浠嬬粛

鈥�		璇PI閫氳繃瀵规姄鍙栫殑娴侀噺杩涜瑙f瀽寰楀埌瀵瑰簲鐨勯€氫俊鑺傜偣鐨処P銆佺鍙e彿銆佽妭鐐笽D浠ュ強鑺傜偣闂寸殑閫氳鍗忚鍜屽姞瀵嗘柟寮忋€�

杈撳叆

- path锛宻tring锛宲cap鍖呮墍鍦ㄧ殑鍦板潃


杈撳嚭

鈥�	閫氫俊缁勭綉鏂瑰紡缁撴灉锛屽寘鎷€氫俊婧愯妭鐐笽P銆佺鍙e彿锛岃妭鐐笽D锛岀洰鐨勮妭鐐笽P銆佺鍙e彿锛岃妭鐐笽D锛岃妭鐐归棿鐨勯€氫俊鍗忚鍜屽姞瀵嗘柟寮忋€�

#### DownTrafficYml  

API 浠嬬粛

鈥�		璇PI鍑芥暟瀹屾垚chainmaker.yml鏂囦欢骞舵斁鍒版寚瀹氱洰褰曘€�

杈撳叆

- host锛宻tring锛屾湇鍔″櫒鍦板潃銆� 
- port锛宨nt64锛屾湇鍔″櫒绔彛鍙枫€�  
- username锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勭敤鎴峰悕銆� 
- password锛宻tring锛岀櫥褰曟湇鍔″櫒鐨勫瘑鐮併€� 
- filePath锛宻tring锛屾枃浠跺湪鐩爣鏈嶅姟鍣ㄤ笂鐨勮矾寰勩€�

杈撳嚭

鈥�	path锛宻tring锛屼笅杞界殑鏂囦欢鍦ㄥ鎴锋満涓繚瀛樼殑璺緞銆�

### 鍩烘湰浣跨敤

```go
func main() {
    // 鎶撳彇閫氫俊娴侀噺
    pcapPath := traffic.CatchTraffic("127.0.0.1", "22", "stack", "chainmaker123", "21301")
    // 鍒嗘瀽閫氫俊娴侀噺
    trafficInfo = traffic.Analyse(pcapPath)
    fmt.Println("trafficInfo1:", trafficInfo)
 }
```