1<!DOCTYPE html> 2<html lang="zh-CN"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <title>䏿¹ä¸è¡æºç ï¼å®ç° sentinel-dashboard ææé ç½®æ¯æ apollo æä¹ å | éå </title> 7 <meta name="generator" content="VuePress 1.9.9"> 8 <link rel="icon" href="/avatar.jpg"> 9 <meta name="description" content="䏿¹ä¸è¡æºç ï¼è®© sentinel-dashboard ææé ç½®æ¯æ apollo æä¹ å"> 10 <meta name="apple-mobile-web-app-capable" content="yes"> 11 <meta name="apple-mobile-web-app-status-bar-style" content="black"> 12 <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"> 13 14 <link rel="preload" href="/assets/css/0.styles.b4b4d60e.css" as="style"><link rel="preload" href="/assets/js/app.4aaf6adf.js" as="script"><link rel="preload" href="/assets/js/2.1cbe77ec.js" as="script"><link rel="preload" href="/assets/js/4.f35e593d.js" as="script"><link rel="prefetch" href="/assets/js/10.4714af69.js"><link rel="prefetch" href="/assets/js/100.10735728.js"><link rel="prefetch" href="/assets/js/101.437574fb.js"><link rel="prefetch" href="/assets/js/102.886d99a9.js"><link rel="prefetch" href="/assets/js/103.256af495.js"><link rel="prefetch" href="/assets/js/104.c4b5ac12.js"><link rel="prefetch" href="/assets/js/105.605c76c6.js"><link rel="prefetch" href="/assets/js/106.a2aba0ad.js"><link rel="prefetch" href="/assets/js/107.dd301d06.js"><link rel="prefetch" href="/assets/js/108.3e618ee3.js"><link rel="prefetch" href="/assets/js/109.d0ef70f5.js"><link rel="prefetch" href="/assets/js/11.75b9a3e9.js">
14<link rel="prefetch" href="/assets/js/110.02b46436.js"><link rel="prefetch" href="/assets/js/111.69b98dad.js"><link rel="prefetch" href="/assets/js/112.14ba1c22.js"><link rel="prefetch" href="/assets/js/113.99232540.js"><link rel="prefetch" href="/assets/js/114.69aa74e2.js"><link rel="prefetch" href="/assets/js/12.7bbd1e4b.js"><link rel="prefetch" href="/assets/js/13.89edc50b.js"><link rel="prefetch" href="/assets/js/14.6f271807.js"><link rel="prefetch" href="/assets/js/15.e17996e6.js"><link rel="prefetch" href="/assets/js/16.892da53c.js"><link rel="prefetch" href="/assets/js/17.cd22c0ff.js"><link rel="prefetch" href="/assets/js/18.ad0acd10.js"><link rel="prefetch" href="/assets/js/19.8ccb0a4a.js"><link rel="prefetch" href="/assets/js/20.41af1e75.js"><link rel="prefetch" href="/assets/js/21.7de074d1.js"><link rel="prefetch" href="/assets/js/22.7ebfaaf0.js"><link rel="prefetch" href="/assets/js/23.7abdf865.js"><link rel="prefetch" href="/assets/js/24.8927cad4.js"><link rel="prefetch" href="/assets/js/25.1bfa5a29.js"><link rel="prefetch" href="/assets/js/26.0ff2a38c.js"><link rel="prefetch" href="/assets/js/27.a0030182.js"><link rel="prefetch" href="/assets/js/28.4d63a6d6.js"><link rel="prefetch" href="/assets/js/29.d4a39b32.js"><link rel="prefetch" href="/assets/js/3.4d86779a.js"><link rel="prefetch" href="/assets/js/30.2cefed39.js"><link rel="prefetch" href="/assets/js/31.b7440d40.js"><link rel="prefetch" href="/assets/js/32.e27e45de.js"><link rel="prefetch" href="/assets/js/33.3045888a.js"><link rel="prefetch" href="/assets/js/34.d7197105.js"><link rel="prefetch" href="/assets/js/35.ffb3832a.js"><link rel="prefetch" href="/assets/js/36.445b5b3f.js"><link rel="prefetch" href="/assets/js/37.4e27fb14.js"><link rel="prefetch" href="/assets/js/38.7253f1f7.js"><link rel="prefetch" href="/assets/js/39.0fddff84.js"><link rel="prefetch" href="/assets/js/40.d46aa001.js"><link rel="prefetch" href="/assets/js/41.0dbc86ae.js"><link rel="prefetch" href="/assets/js/42.06c834cb.js"><link rel="prefetch" href="/assets/js/43.744a8585.js"><link rel="prefetch" href="/assets/js/44.472c8b80.js"><link rel="prefetch" href="/assets/js/45.b15443a1.js"><link rel="prefetch" href="/assets/js/46.59e86dd7.js"><link rel="prefetch" href="/assets/js/47.3e61e857.js"><link rel="prefetch" href="/assets/js/48.d7bba2dc.js"><link rel="prefetch" href="/assets/js/49.2ffc3755.js"><link rel="prefetch" href="/assets/js/5.f49c84d0.js"><link rel="prefetch" href="/assets/js/50.34fc1d02.js"><link rel="prefetch" href="/assets/js/51.7b8535c1.js"><link rel="prefetch" href="/assets/js/52.b7d758da.js"><link rel="prefetch" href="/assets/js/53.080d0cad.js"><link rel="prefetch" href="/assets/js/54.934c0f26.js"><link rel="prefetch" href="/assets/js/55.ff305b9a.js"><link rel="prefetch" href="/assets/js/56.368e0e31.js"><link rel="prefetch" href="/assets/js/57.73bf8734.js"><link rel="prefetch" href="/assets/js/58.9df64e2b.js"><link rel="prefetch" href="/assets/js/59.a3a6256a.js"><link rel="prefetch" href="/assets/js/6.aea057c4.js"><link rel="prefetch" href="/assets/js/60.0676bff9.js"><link rel="prefetch" href="/assets/js/61.2275bd97.js"><link rel="prefetch" href="/assets/js/62.c1212903.js"><link rel="prefetch" href="/assets/js/63.0857caf2.js"><link rel="prefetch" href="/assets/js/64.27f29440.js"><link rel="prefetch" href="/assets/js/65.8e6d28ff.js"><link rel="prefetch" href="/assets/js/66.a5450fcb.js"><link rel="prefetch" href="/assets/js/67.6e521157.js"><link rel="prefetch" href="/assets/js/68.60a287b8.js"><link rel="prefetch" href="/assets/js/69.3f16344d.js"><link rel="prefetch" href="/assets/js/7.64d796f6.js"><link rel="prefetch" href="/assets/js/70.860a986b.js"><link rel="prefetch" href="/assets/js/71.7a9b24be.js"><link rel="prefetch" href="/assets/js/72.770bec22.js"><link rel="prefetch" href="/assets/js/73.468cb0f1.js"><link rel="prefetch" href="/assets/js/74.f7ba2c1f.js"><link rel="prefetch" href="/assets/js/75.d57cdc3d.js"><link rel="prefetch" href="/assets/js/76.d1ad8a1f.js"><link rel="prefetch" href="/assets/js/77.a3709ccb.js"><link rel="prefetch" href="/assets/js/78.7df81f81.js"><link rel="prefetch" href="/assets/js/79.ac117d2b.js"><link rel="prefetch" href="/assets/js/8.7ce93dbf.js"><link rel="prefetch" href="/assets/js/80.ed4af636.js"><link rel="prefetch" href="/assets/js/81.edc75d15.js"><link rel="prefetch" href="/assets/js/82.abda0414.js">
14<link rel="prefetch" href="/assets/js/83.b7bded87.js"><link rel="prefetch" href="/assets/js/84.ca98fdc7.js"><link rel="prefetch" href="/assets/js/85.432b78d9.js"><link rel="prefetch" href="/assets/js/86.7747f32a.js"><link rel="prefetch" href="/assets/js/87.8d3f36ec.js"><link rel="prefetch" href="/assets/js/88.2143a0c0.js"><link rel="prefetch" href="/assets/js/89.70448dbf.js"><link rel="prefetch" href="/assets/js/9.2d64845a.js"><link rel="prefetch" href="/assets/js/90.a888dff7.js"><link rel="prefetch" href="/assets/js/91.7ae92518.js"><link rel="prefetch" href="/assets/js/92.9d326543.js"><link rel="prefetch" href="/assets/js/93.16e582ff.js"><link rel="prefetch" href="/assets/js/94.ac10407c.js"><link rel="prefetch" href="/assets/js/95.3a62f76d.js"><link rel="prefetch" href="/assets/js/96.012466dd.js"><link rel="prefetch" href="/assets/js/97.7add8027.js"><link rel="prefetch" href="/assets/js/98.5df8df77.js"><link rel="prefetch" href="/assets/js/99.7e18b041.js"> 15 <link rel="stylesheet" href="/assets/css/0.styles.b4b4d60e.css"> 16 </head> 17 <body class="theme-mode-light"> 18 <div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu"><header class="navbar blur"><div title="ç®å½" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/avatar.jpg" alt="éå " class="logo"> <span class="site-name can-hide">éå </span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">é¦é¡µ</a></div><div class="nav-item"><a href="/go/" class="nav-link">golang</a></div><div class="nav-item"><a href="/java/" class="nav-link">java</a></div><div class="nav-item"><a href="/architect/" class="nav-link">æ¶æ</a></div><div class="nav-item"><a href="/alg/lru-cache/" class="nav-link">常ç¨ç®æ³</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="书å" class="dropdown-title"><!----> <span class="title" style="display:;">书å</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/book/java/alibaba-java-manual/" class="nav-link">Java</a></li><li class="dropdown-item"><!----> <a href="/book/nginx/" class="nav-link">nginx</a></li><li class="dropdown-item"><!----> <a href="/book/sre/vbird-linux-basic-4/" class="nav-link">ç³»ç»è¿ç»´</a></li><li class="dropdown-item"><!----> <a href="/book/security/white-hat-web-security/" class="nav-link">ç³»ç»å®å ¨</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="æ°æ®åº&ç¼å" class="dropdown-title"><!----> <span class="title" style="display:;">æ°æ®åº&ç¼å</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/8f6be4/" class="nav-link">mysql</a></li><li class="dropdown-item"><!----> <a href="/pages/7d45f8/" class="nav-link">redis</a></li></ul></div></div><div class="nav-item"><a href="/categories/?category=%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3&.html#" class="nav-link">åèææ¡£</a></div><div class="nav-item"><a href="/about/" class="nav-link">å ³äº</a></div><div class="nav-item"><a href="/awesome/" class="nav-link">æ¶è</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="ç´¢å¼" class="dropdown-title"><a href="/archives/" class="link-title">ç´¢å¼</a> <span class="title" style="display:none;">ç´¢å¼</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">åç±»</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">æ ç¾</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">
18彿¡£</a></li></ul></div></div> <a href="https://github.com/fengjx" target="_blank" rel="noopener noreferrer" class="repo-link"> 19 GitHub 20 <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><div class="blogger"><img src="/avatar.jpg"> <div class="blogger-info"><h3>éå </h3> <span>ä¸äºè¯å¤ç䏿³¨å½ä¸</span></div></div> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">é¦é¡µ</a></div><div class="nav-item"><a href="/go/" class="nav-link">golang</a></div><div class="nav-item"><a href="/java/" class="nav-link">java</a></div><div class="nav-item"><a href="/architect/" class="nav-link">æ¶æ</a></div><div class="nav-item"><a href="/alg/lru-cache/" class="nav-link">常ç¨ç®æ³</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="书å" class="dropdown-title"><!----> <span class="title" style="display:;">书å</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/book/java/alibaba-java-manual/" class="nav-link">Java</a></li><li class="dropdown-item"><!----> <a href="/book/nginx/" class="nav-link">nginx</a></li><li class="dropdown-item"><!----> <a href="/book/sre/vbird-linux-basic-4/" class="nav-link">ç³»ç»è¿ç»´</a></li><li class="dropdown-item"><!----> <a href="/book/security/white-hat-web-security/" class="nav-link">ç³»ç»å®å ¨</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="æ°æ®åº&ç¼å" class="dropdown-title"><!----> <span class="title" style="display:;">æ°æ®åº&ç¼å</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/8f6be4/" class="nav-link">mysql</a></li><li class="dropdown-item"><!----> <a href="/pages/7d45f8/" class="nav-link">redis</a></li></ul></div></div><div class="nav-item"><a href="/categories/?category=%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3&.html#" class="nav-link">åèææ¡£</a></div><div class="nav-item"><a href="/about/" class="nav-link">å ³äº</a></div><div class="nav-item"><a href="/awesome/" class="nav-link">æ¶è</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="ç´¢å¼" class="dropdown-title"><a href="/archives/" class="link-title">ç´¢å¼</a> <span class="title" style="display:none;">ç´¢å¼</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/categories/" class="nav-link">åç±»</a></li><li class="dropdown-item"><!----> <a href="/tags/" class="nav-link">æ ç¾</a></li><li class="dropdown-item"><!----> <a href="/archives/" class="nav-link">彿¡£</a></li></ul></div></div> <a href="https://github.com/fengjx" target="_blank" rel="noopener noreferrer" class="repo-link"> 21 GitHub 22 <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>æ¦è§</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>设计模å¼</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>æ§è½ä¼å</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>åå¸å¼</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>ç½å ³</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>æµéæ²»ç</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/sentinel-dashboard-apollo/" aria-current="page" class="active sidebar-link">䏿¹ä¸è¡æºç ï¼å®ç° sentinel-dashboard ææé ç½®æ¯æ apollo æä¹ å</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#sentinel-dashboard-apollo-å®å¶ç" class="sidebar-link">sentinel-dashboard apollo å®å¶ç</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#sentinel-dashboard-为ä»ä¹éè¦å®å¶" class="sidebar-link">sentinel-dashboard 为ä»ä¹éè¦å®å¶</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#æ¹æ¡éå" class="sidebar-link">æ¹æ¡éå</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#æºç åæ" class="sidebar-link">æºç åæ</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#æ¹é å®ç°" class="sidebar-link">æ¹é å®ç°</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#æ¹é åçææ" class="sidebar-link">æ¹é åçææ</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#å级-çæ¬ç»´æ¤" class="sidebar-link">å级&çæ¬ç»´æ¤</a></li><li class="sidebar-sub-header level2"><a href="/sentinel-dashboard-apollo/#ç¸å ³ææ¡£" class="sidebar-link">ç¸å ³ææ¡£</a></li></ul></li><li><a href="/sentinel-dashboard-apollo-wiki/" class="sidebar-link">sentinel-dashboard-apollo 使ç¨</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>æ°æ®æ²»ç</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>
22äºåç</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="articleInfo-wrap" data-v-06225672><div class="articleInfo" data-v-06225672><ul class="breadcrumbs" data-v-06225672><li data-v-06225672><a href="/" title="é¦é¡µ" class="iconfont icon-home router-link-active" data-v-06225672></a></li> <li data-v-06225672><a href="/categories/?category=%E6%9E%B6%E6%9E%84" title="åç±»" data-v-06225672>æ¶æ</a></li><li data-v-06225672><a href="/categories/?category=%E6%B5%81%E9%87%8F%E6%B2%BB%E7%90%86" title="åç±»" data-v-06225672>æµéæ²»ç</a></li></ul> <div class="info" data-v-06225672><div title="ä½è
" class="author iconfont icon-touxiang" data-v-06225672><a href="https://github.com/xugaoyi" target="_blank" title="ä½è
" class="beLink" data-v-06225672>xugaoyi</a></div> <div title="å建æ¶é´" class="date iconfont icon-riqi" data-v-06225672><a href="javascript:;" data-v-06225672>2022-07-30</a></div> <!----></div></div></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-title">ç®å½</div> <div class="right-menu-content"></div></div></div> <h1><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg==">䏿¹ä¸è¡æºç ï¼å®ç° sentinel-dashboard ææé
ç½®æ¯æ apollo æä¹
å<!----></h1> <div class="theme-vdoing-content content__default"><h2 id="sentinel-dashboard-apollo-å®å¶ç"><a href="#sentinel-dashboard-apollo-å®å¶ç" class="header-anchor">#</a> sentinel-dashboard apollo å®å¶ç</h2> <p>sentinel-dashboard-apollo æ¯ä»å®æ¹ <a href="https://github.com/alibaba/Sentinel" target="_blank" rel="noopener noreferrer">Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> fork ç dashboard å®å¶çï¼æ¯æææé
ç½®æä¹
åå° apolloã</p> <ul><li>githubï¼<a href="https://github.com/fengjx/Sentinel" target="_blank" rel="noopener noreferrer">https://github.com/fengjx/Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound">
22<path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li>giteeï¼<a href="https://gitee.com/fengjx/Sentinel" target="_blank" rel="noopener noreferrer">https://gitee.com/fengjx/Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li>ä½¿ç¨ææ¡£ï¼<a href="http://blog.fengjx.com/sentinel-dashboard-apollo-wiki" target="_blank" rel="noopener noreferrer">http://blog.fengjx.com/sentinel-dashboard-apollo-wiki<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li>spring-boot(cloud) æ´å demo: <a href="https://github.com/fengjx/sentinel-dashboard-demo" target="_blank" rel="noopener noreferrer">https://github.com/fengjx/sentinel-dashboard-demo<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul> <h2 id="sentinel-dashboard-为ä»ä¹éè¦å®å¶"><a href="#sentinel-dashboard-为ä»ä¹éè¦å®å¶" class="header-anchor">#</a> sentinel-dashboard 为ä»ä¹éè¦å®å¶</h2> <p><a href="https://github.com/alibaba/Sentinel" target="_blank" rel="noopener noreferrer">Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> æ¯é¿é巴巴弿ºçæµéæ²»çç»ä»¶ãåè½é常é½å
¨ï¼å
æ¬äºï¼è¯·æ±è¿æ»¤ãé级ãéæµãæµéçæ§çåè½ã妿坹 sentinel è¿ä¸æ¯å¾äºè§£å¯ä»¥æ¥ç宿¹ææ¡£ï¼<a href="https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html" target="_blank" rel="noopener noreferrer">https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <p>è½ç¶ sentinel ç设计é常ä¼ç§ï¼åºæ¬ä¸æ»¡è¶³äºæµéæ²»ççææéæ±ï¼ä½æ¯ sentinel-dashboardï¼ç®¡çåå°ï¼çé
ç½®é½æ¯åå¨å¨å
åï¼å¨æå¡éå¯åå°±ä¼ä¸¢å¤±ãæä»¥ sentinel ç®åæ¯ä¸å
·å¤å¨ç产ç¯å¢ä¸ä½¿ç¨çãå³ä½¿ sentinel 客æ·ç«¯æ¯æ¯æäºä» apolloãconsulãetcdãeurekaãnacosãredisãspring-cloud-configãzookeeper 读åé
ç½®ï¼ä½æ¯å¦æä¸ä½¿ç¨ dashboardï¼ç´æ¥æå¨ä¿®æ¹é
ç½®çè¯ï¼å®ç½ä¹æ²¡ææä¾è¯¦ç»çåæ°é
ç½®ææ¡£ï¼æ³ç¥éåªäºåæ°å¯é
ç½®ï¼éè¦èªå·±æ¥çæºç ï¼ä½¿ç¨ä¸é常ä¸å好ã</p> <p>èè¿ä¸ªé®é¢æ©å¨ 2020 å¹´å°±æäººæåºæ¥äºï¼github issueï¼ dashboard é
ç½®æä¹
ååè½ï¼ä½æ¯å®æ¹è³ä»ï¼2
22022-07ï¼ä¾ç¶æ²¡æå®ç°è¿ä¸ªåè½ã</p> <div class="custom-block tip"><p class="custom-block-title">issue</p> <p><a href="https://github.com/alibaba/Sentinel/issues/1759" target="_blank" rel="noopener noreferrer">https://github.com/alibaba/Sentinel/issues/1759<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <p><a href="https://github.com/alibaba/Sentinel/issues/2179" target="_blank" rel="noopener noreferrer">https://github.com/alibaba/Sentinel/issues/2179<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p></div> <p>å¼å¾ä¸æçæ¯ï¼é¿éäºçåä¸ç sentinel-dashboard æ¯æè¿ä¸ªåè½çãå¹¶ä¸å¨ test 代ç ä¸å¯ä»¥çå°æå¯¹åºæä¹
åå®ç°çãæä»¥è¿å¾ææ¾å®æ¹å¹¶ä¸æ³å¨å¼æºç
22å®ç°è¿ä¸ªåè½ï¼éè¦æä»¬èªå·±å»å®ç°ãè¿å
¶ä¸çåç±å·²ç»éå¸¸ææ¾äºã</p> <img width="50%" src="/assets/img/01.sentinel-dashboard-test.df10197e.png"> <p><img src="/assets/img/01.sentinel-dashboard-aliyun.9ec6549f.jpg" alt=""></p> <h2 id="æ¹æ¡éå"><a href="#æ¹æ¡éå" class="header-anchor">#</a> æ¹æ¡éå</h2> <p>ç®åå·²ç»å®ç°çç»ä»¶ä¸ï¼sentinel 客æ·ç«¯å·²ç»æ¯æï¼</p> <ul><li>apollo</li> <li>consul</li> <li>etcd</li> <li>eureka</li> <li>nacos</li> <li>redis</li> <li>spring-cloud-config</li> <li>zookeeper</li></ul> <img width="50%" src="/assets/img/01.sentinel-datasource.7a9d76aa.png"> <p>以æå°åæ¹å¨ååï¼æä»¬å¯ä»¥ä»ä¸é¢å
¶ä¸ä¸ä¸ªä½ä¸ºæä¹
åå卿¹æ¡ï¼å¦åå°±éè¦èªå·±åå¼åä¸å¥å®¢æ·ç«¯åæ¥æ°æ®ç»ä»¶ã</p> <p>è¿éæéæ© apolloï¼çç±æ¯ï¼apollo ä½ä¸ºé
ç½®ä¸å¿ï¼æä¸°å¯çé
ç½®åè½ï¼ä¸å
¶ä»æ¹æ¡å¦ nacos é½è¦å®åå稳å®è®¸å¤ãèå
¶ä»å¦ redisãzookeeper 卿°æ®ææ¥æ¹é¢é½ä¸æ¯å¤ªæ¹ä¾¿ã</p> <h2 id="æºç åæ"><a href="#æºç åæ" class="header-anchor">#</a> æºç åæ</h2> <p>sentinel-dashboard çæºç ç»æé常ç®åãåç«¯ä½¿ç¨ spring-bootï¼åç«¯ä½¿ç¨ angular1ã</p> <p>æä»¬æå¼æµè§å¨æå
å·¥å
·ï¼å¨çé¢ä¸æä½å¢å æ¹æ¥å¯¹åºé
ç½®ï¼å°±å¯ä»¥ç¥é对åºçæ¥å£æ¯å¤å°ï¼ç¶åéè¿æ¥å£è·¯å¾æ¾å°å¯¹åºç Controllerï¼ç»§ç»å¾ä¸è·è¸ªå°±å¯ä»¥ç¥é宿´çå¤çæµç¨äºã</p> <p><img src="/assets/img/01.sentinel-dashboard-api.3919f314.png" alt=""></p> <p>ä¾å¦ï¼æ°å¢ç½å
³æµæ§è§åçæ¥å£æ¯ <code>/gateway/flow/new.json</code></p> <p>éè¿åæä¸é¾åç°ï¼ä¸ç®¡æ¯ä»ä¹é
ç½®ï¼å¯¹åºå¢å æ¹æ¥çæ¥å£è·¯å¾é½æ¯ç±»ä¼¼çã</p> <img width="50%" src="/assets/img/01.sentinel-dashbaord-controller.75674b1e.png"> <p>sentinel è§åæ»å
±æ 7 ä¸ç±»åï¼é½å®ç°äº <code>RuleEntity</code> æ¥å£</p> <img width="50%" src="/assets/img/01.sentinel-dashboard-rule.f321ee60.png"> <p>æä»¬éè¦å®ç°ç乿¯å°è¿7ç§æ°æ®ç±»åæä¹
åå° apolloã</p> <p>ä» sentinel çæ¶æè®¾è®¡ä¸å¯ä»¥ç¥éå为 sentinel 客æ·ç«¯ï¼ä¹å°±æ¯æä»¬çåºç¨ï¼å sentinel-dashboardï¼ç®¡çåå°ï¼ã</p> <p>éè¿åæ <code>FlowControllerV1</code> æºç ï¼å¯ä»¥ç¥éé
置读å齿¯éè¿ <code>SentinelApiClient</code> æ¥å®æçã</p> <ul><li><p>è¯»æ°æ®ï¼éè¿ <code>SentinelApiClient</code> 请æ±å®¢æ·ç«¯ï¼æåé
ç½®ï¼ç¶åæ´æ°å°å
å</p> <p><img src="/assets/img/01.sentinel-dashboard-rule-fetch.22f18a09.png" alt=""></p></li> <li><p>åæ°æ®ï¼å
ä¿åå°å
åï¼ç¶åè°ç¨ <code>SentinelApiClient</code> å°è¯·æ±åæ¥å°å®¢æ·ç«¯</p> <p><img src="/assets/img/01.sentinel-dashboard-rule-save.d5c9d705.png" alt=""></p></li></ul> <h2 id="æ¹é å®ç°"><a href="#æ¹é å®ç°" class="header-anchor">#</a> æ¹é å®ç°</h2> <p>对äºå¨ç产ç¯å¢ä¸ä½¿ç¨ Sentinelï¼<a href="https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel" target="_blank" rel="noopener noreferrer">å®ç½ææ¡£<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>ä¸ç»æä»¬ä»ç»äºå ç§æ¨¡å¼ãéè¿ä¸é¢æºç åæçæµç¨å®ç°çå°±æ¯åå§æ¨¡å¼ï¼æä»¬çæ¹é æ¹æ¡æ¯è¦å®ç°æ¨æ¨¡å¼ã</p> <p>å¯¹äºæ¹é æ¹æ¡ï¼å¦æåè¿è¿æ¹é¢è°ç çåå¦ï¼æ¾å°çèµæåºæ¬ä¸é½æ¯åªå®ç°äºæµéæ§å¶è§åæä¹
åï¼èå©ä¸å
¶ä» 6 ä¸è§å并没æå®ç°æä¹
åï¼å
æ¬å§ç§è¾°ï¼å§åä»ï¼èå¸å¨æå®¢æ¶é´ä¸ç䏿 ãSpring Cloud å¾®æå¡é¡¹ç®å®æã第 20 ç« è<a href="https://time.geekbang.org/column/article/482647" target="_blank" rel="noopener noreferrer">Sentinel 宿ï¼å¦ä½æ¥å
¥ Nacos å®ç°è§åæä¹
åï¼<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound">
22<path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> ä¸çæ¹æ¡ä¹åªæ¯æ<code>æµæ§è§å</code>é ç½®åäºæä¹ åã大家å¯ä»¥èªå·±æç´¢ä¸ä¸ï¼è¿éä¸åèµè¿°ã</p> <p>以䏿¹æ¡é½åå¨å 个ä¸è¶³ã</p> <ol><li>åªå®ç°äºæµæ§è§åæä¹ å</li> <li>éè¦ä¿®æ¹æºç ï¼å æ¬å端代ç ï¼ï¼ä¸æ¾é¢åç»æ»å¨å级</li> <li>妿 7 ä¸ç±»åæ°æ®é½åæä¹ åçï¼é£éè¦ä¿®æ¹çå°æ¹ä¼æ¯è¾å¤</li></ol> <p>éè¿ä¸é¢æºç åæå¯ä»¥ç¥éï¼å ¶å®æ°æ®æå忍é齿¯éè¿<code>SentinelApiClient</code> ç fetchXXXï¼æåæ°æ®ï¼å setXXX, modifyXXXï¼æ¨éæ°æ®ï¼æ¹æ³æ¥å®ç°çï¼æä»¥æä»¬åªè¦æå¯¹åºçæ¹æ³æ¹æä» apollo æåæ°æ®åå°æ°æ®æ¨éå° apollo ä¸å°±å¯ä»¥äºï¼</p> <p>å 为 <code>SentinelApiClient</code> 没æå®ä¹æ¥å£ï¼æä»¥è¦å¨ä¸æ¹åæºç çæ åµä¸æ¹åå®çé»è®¤è¡ä¸ºï¼å°±è¦éè¿aopæ¥å®ç°äºã</p> <p>ä¸é¢æ¯å®ç°ç½å ³æµæ§è§å读å apollo ç示ä¾ä»£ç ã</p> <div class="language-java line-numbers-mode"><pre class="language-java"><code><span class="token annotation punctuation">@Aspect</span> 23<span class="token annotation punctuation">@Component</span> 24<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SentinelApiClientAspect</span> <span class="token punctuation">{</span> 25 26 <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">Logger</span> <span class="token constant">LOG</span> <span class="token operator">=</span> <span class="token class-name">LoggerFactory</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token class-name">SentinelApiClientAspect</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 27 28 <span class="token annotation punctuation">@SuppressWarnings</span><span class="token punctuation">(</span><span class="token string">"PMD.ThreadPoolCreationRule"</span><span class="token punctuation">)</span> 29 <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">ExecutorService</span> <span class="token constant">EXECUTOR</span> <span class="token operator">=</span> <span class="token class-name">Executors</span><span class="token punctuation">.</span><span class="token function">newSingleThreadExecutor</span><span class="token punctuation">(</span> 30 <span class="token keyword">new</span> <span class="token class-name">NamedThreadFactory</span><span class="token punctuation">(</span><span class="token string">"sentinel-dashboard-api-aspect"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 31 32 <span class="token annotation punctuation">@Resource</span> 33 <span class="token keyword">private</span> <span class="token class-name">DynamicRuleStoreFactory</span> factory<span class="token punctuation">;</span> 34 35 36 <span class="token annotation punctuation">@Pointcut</span><span class="token punctuation">(</span><span class="token string">"execution(public * com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient.fetchGatewayFlowRules(..))"</span><span class="token punctuation">)</span> 37 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">fetchGatewayFlowRulesPointcut</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 38 <span class="token punctuation">}</span> 39 40 <span class="token annotation punctuation">@Pointcut</span><span class="token punctuation">(</span><span class="token string">"execution(public * com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient.modifyGatewayFlowRules(..))"</span><span class="token punctuation">)</span> 41 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">modifyGatewayFlowRulesPointcut</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 42 <span class="token punctuation">}</span> 43 44 <span class="token comment">/** 45 * æåç½å ³æµæ§è§åé ç½® 46 */</span> 47 <span class="token annotation punctuation">
47@Around</span><span class="token punctuation">(</span><span class="token string">"fetchGatewayFlowRulesPointcut()"</span><span class="token punctuation">)</span> 48 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">fetchGatewayFlowRules</span><span class="token punctuation">(</span><span class="token keyword">final</span> <span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Throwable</span> <span class="token punctuation">{</span> 49 <span class="token keyword">return</span> <span class="token function">fetchRulesWithCompletableFuture</span><span class="token punctuation">(</span>pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span><span class="token punctuation">.</span><span class="token constant">GW_FLOW</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 50 <span class="token punctuation">}</span> 51 52 <span class="token comment">/** 53 * æ¨éç½å ³æµæ§è§åé ç½® 54 */</span> 55 <span class="token annotation punctuation">@Around</span><span class="token punctuation">(</span><span class="token string">"modifyGatewayFlowRulesPointcut()"</span><span class="token punctuation">)</span> 56 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">modifyGatewayFlowRules</span><span class="token punctuation">(</span><span class="token keyword">final</span> <span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Throwable</span> <span class="token punctuation">{</span> 57 <span class="token keyword">return</span> <span class="token function">publishRules</span><span class="token punctuation">(</span>pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span><span class="token punctuation">.</span><span class="token constant">GW_FLOW</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 58 <span class="token punctuation">}</span> 59 60 <span class="token comment">// ä¸é´çç¥äºé¨å代ç ï¼å®æ´ä»£ç å¯ä»¥ä» github æ¥ç</span> 61 62 <span class="token keyword">private</span> <span class="token class-name">Object</span> <span class="token function">fetchRules</span><span class="token punctuation">(</span><span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span> ruleType<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Throwable</span> <span class="token punctuation">{</span> 63 <span class="token class-name">DynamicRuleStore</span><span class="token generics"><span class="token punctuation"><</span><span class="token operator">?</span><span class="token punctuation">></span></span> dynamicRuleStore <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">getDynamicRuleStoreByType</span><span class="token punctuation">(</span>ruleType<span class="token punctuation">)</span><span class="token punctuation">;</span> 64 <span class="token keyword">if</span> <span class="token punctuation">(</span>dynamicRuleStore <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 65 <span class="token keyword">return</span> pjp<span class="token punctuation">.</span><span class="token function">proceed</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 66 <span class="token punctuation">}</span> 67 <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args <span class="token operator">=</span> pjp<span class="token punctuation">.</span><span class="token function">getArgs</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
68 <span class="token class-name">String</span> app <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">)</span> args<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> 69 <span class="token keyword">return</span> dynamicRuleStore<span class="token punctuation">.</span><span class="token function">getRules</span><span class="token punctuation">(</span>app<span class="token punctuation">)</span><span class="token punctuation">;</span> 70 <span class="token punctuation">}</span> 71 72 <span class="token keyword">private</span> <span class="token class-name">CompletableFuture</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">Object</span><span class="token punctuation">></span></span> <span class="token function">fetchRulesWithCompletableFuture</span><span class="token punctuation">(</span><span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span> ruleType<span class="token punctuation">)</span> <span class="token punctuation">{</span> 73 <span class="token keyword">return</span> <span class="token class-name">CompletableFuture</span><span class="token punctuation">.</span><span class="token function">supplyAsync</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span> 74 <span class="token keyword">try</span> <span class="token punctuation">{</span> 75 <span class="token keyword">return</span> <span class="token function">fetchRules</span><span class="token punctuation">(</span>pjp<span class="token punctuation">,</span> ruleType<span class="token punctuation">)</span><span class="token punctuation">;</span> 76 <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Throwable</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> 77 <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span><span class="token string">"fetch rules error: "</span> <span class="token operator">+</span> ruleType<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> e<span class="token punctuation">)</span><span class="token punctuation">;</span> 78 <span class="token punctuation">}</span> 79 <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token constant">EXECUTOR</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 80 <span class="token punctuation">}</span> 81 82 83 <span class="token annotation punctuation">@SuppressWarnings</span><span class="token punctuation">(</span><span class="token string">"unchecked"</span><span class="token punctuation">)</span> 84 <span class="token keyword">private</span> <span class="token keyword">boolean</span> <span class="token function">publishRules</span><span class="token punctuation">(</span><span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span> ruleType<span class="token punctuation">)</span> <span class="token punctuation">{</span> 85 <span class="token class-name">DynamicRuleStore</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">RuleEntity</span><span class="token punctuation">></span></span> dynamicRuleStore <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">getDynamicRuleStoreByType</span><span class="token punctuation">(</span>ruleType<span class="token punctuation">)</span><span class="token punctuation">;</span>
86 <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args <span class="token operator">=</span> pjp<span class="token punctuation">.</span><span class="token function">getArgs</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 87 <span class="token class-name">String</span> app <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">)</span> args<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> 88 <span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">RuleEntity</span><span class="token punctuation">></span></span> rules <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">RuleEntity</span><span class="token punctuation">></span></span><span class="token punctuation">)</span> args<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">;</span> 89 <span class="token keyword">try</span> <span class="token punctuation">{</span> 90 dynamicRuleStore<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span>app<span class="token punctuation">,</span> rules<span class="token punctuation">)</span><span class="token punctuation">;</span> 91 <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> 92 <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> 93 <span class="token constant">LOG</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"publish rules error"</span><span class="token punctuation">,</span> e<span class="token punctuation">)</span><span class="token punctuation">;</span> 94 <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> 95 <span class="token punctuation">}</span> 96 <span class="token punctuation">}</span> 97 98 <span class="token keyword">private</span> <span class="token class-name">CompletableFuture</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">Void</span><span class="token punctuation">></span></span> <span class="token function">publishRulesWithCompletableFuture</span><span class="token punctuation">(</span><span class="token class-name">ProceedingJoinPoint</span> pjp<span class="token punctuation">,</span> <span class="token class-name">RuleType</span> ruleType<span class="token punctuation">)</span> <span class="token punctuation">{</span> 99 <span class="token keyword">return</span> <span class="token class-name">CompletableFuture</span><span class="token punctuation">.</span><span class="token function">runAsync</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">publishRules</span><span class="token punctuation">(</span>pjp<span class="token punctuation">,</span> ruleType<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant">EXECUTOR</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 100 <span class="token punctuation">}</span> 101<span class="token punctuation">}</span> 102</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">
10253</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br><span class="line-number">78</span><br><span class="line-number">79</span><br><span class="line-number">80</span><br></div></div><p>å¯¹åº apollo è¯»åæ°æ®ç代ç å¨ test å
ä¸å·²ç»æäºï¼æ¿è¿æ¥ç¨å æ¹å¨å°±å¯ä»¥äº</p> <img width="50%" src="/assets/img/01.sentinel-dashboard-test-apollo.0b8d9de3.png"> <p>宿´ç代ç å®ç°å¯ä»¥å¨ github 䏿¥çï¼<a href="https://github.com/fengjx/Sentinel" target="_blank" rel="noopener noreferrer">https://github.com/fengjx/Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>ï¼æ´ä¸ªæ¹å¨æ²¡æä¿®æ¹ä¸è¡æºç ï¼åªæ¯æ°å¢äºä¸äºç±»ï¼æ¹ä¾¿åç»å级ä¸ä¼å¼èµ·ä»£ç å²çªã</p> <h2 id="æ¹é åçææ"><a href="#æ¹é åçææ" class="header-anchor">#</a> æ¹é åçææ</h2> <p>dashboard é
ç½®</p> <p><img src="/assets/img/01.sentinel-dashboard-demo.ad2abd62.png" alt=""></p> <p>apollo é
ç½®</p> <p><img src="/assets/img/01.sentinel-dashboard-apollo-settings.f04f4413.png" alt=""></p> <h2 id="å级-çæ¬ç»´æ¤"><a href="#å级-çæ¬ç»´æ¤" class="header-anchor">#</a> å级&çæ¬ç»´æ¤</h2> <p>æ¬é¡¹ç®ä» sentinel 宿¹ github ä»åº forkï¼åªé对 dashboard 模åè¿è¡ä¿®æ¹ï¼ä¿æä¸å®æ¹åå¸çæ¬åæ¥ä¿®æ¹ï¼çæ¬å¯¹åºå
³ç³»</p> <table><thead><tr><th style="text-align:left;">Sentinel</th> <th style="text-align:left;">sentinel-dashboard-apollo</th> <th style="text-align:left;">说æ</th></tr></thead> <tbody><tr><td style="text-align:left;">branch - master</td> <td style="text-align:left;">branch: dashboard/apollo/master</td> <td style="text-align:left;">ä¿æææ°çæ¬ä¸å®æ¹ master 忥</td></tr> <tr><td style="text-align:left;">tag - 1.8.4</td> <td style="text-align:left;">branch: dashboard/apollo/1.8.4</td> <td style="text-align:left;">ä»å®æ¹åå¸ç tag checkout åºæ¥è¿è¡ä¿®æ¹</td></tr> <tr><td style="text-align:left;">tag - 1.8.4</td> <td style="text-align:left;">tag: dashboard/apollo/v1.8.4</td> <td style="text-align:left;">ä¿®æ¹å®æååå¸tag</td></tr></tbody></table> <h2 id="ç¸å
³ææ¡£"><a href="#ç¸å
³ææ¡£" class="header-anchor">#</a> ç¸å
³ææ¡£</h2> <ul><li><a href="https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0" target="_blank" rel="noopener noreferrer">Sentinel æ§å¶å°<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li><a href="https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel" target="_blank" rel="noopener noreferrer">å¨ç产ç¯å¢ä¸ä½¿ç¨ Sentinel<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound">
102<path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div> <div class="page-edit"><!----> <div class="tags"><a href="/tags/?tag=sentinel" title="æ ç¾">#sentinel</a><a href="/tags/?tag=%E6%B5%81%E9%87%8F%E6%B2%BB%E7%90%86" title="æ ç¾">#æµéæ²»ç</a></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">2024/04/23, 01:30:37</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><a href="/pages/5bffac/" class="page-nav-centre page-nav-centre-prev"><div class="tooltip">openresty æµè¯æ¡æ¶ test::nginx å®è£ </div></a> <a href="/sentinel-dashboard-apollo-wiki/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">sentinel-dashboard-apollo 使ç¨</div></a></div> <div class="page-nav"><p class="inner"><span class="prev"> 103 â 104 <a href="/pages/5bffac/" class="prev">openresty æµè¯æ¡æ¶ test::nginx å®è£ </a></span> <span class="next"><a href="/sentinel-dashboard-apollo-wiki/">sentinel-dashboard-apollo 使ç¨</a>â 105 </span></p></div></div></div> <div class="article-list"><div class="article-title"><a href="/archives/" class="iconfont icon-bi">æè¿æ´æ°</a></div> <div class="article-wrapper"><dl><dd>01</dd> <dt><a href="/pages/efb886/"><div> 106 go-kitå¦ä¹ æå - å¤åè®®æ¯æ 107 <!----></div></a> <span class="date">04-19</span></dt></dl><dl><dd>02</dd> <dt><a href="/pages/d6f092/"><div> 108 go-kitå¦ä¹ æå - ä¸é´ä»¶ 109 <!----></div></a> <span class="date">04-19</span></dt></dl><dl><dd>03</dd> <dt><a href="/pages/a15528/"><div> 110 go-kitå¼åå¾®æå¡ - æå¡æ³¨åä¸åç° 111 <!----></div></a> <span class="date">04-19</span></dt></dl> <dl><dd></dd> <dt><a href="/archives/" class="more">æ´å¤æç« ></a></dt></dl></div></div></main></div> <div class="footer"><div class="icons"><a href="/cdn-cgi/l/email-protection#1a7c7f747d70737b74627374282a2b285a7d777b737634797577" title="åé®ä»¶" target="_blank" class="iconfont icon-youjian"></a><a href="https://github.com/fengjx" title="GitHub" target="_blank" class="iconfont icon-github"></a><a href="https://music.163.com/#/playlist?id=40434004" title="å¬é³ä¹" target="_blank" class="iconfont icon-erji"></a></div> 112 Theme by 113 <a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="æ¬ç«ä¸»é¢">Vdoing</a> 114 | Copyright © 2016-2026 115 <span>éå | <a href="http://beian.miit.gov.cn/" target="_blank">粤ICPå¤15021633å·</a></span></div> <div class="buttons"><div title="è¿åé¡¶é¨" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="å»è¯è®º" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="䏻颿¨¡å¼" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong"> 116 è·éç³»ç» 117 </li><li class="iconfont icon-rijianmoshi"> 118 æµ è²æ¨¡å¼ 119 </li><li class="iconfont icon-yejianmoshi"> 120 æ·±è²æ¨¡å¼ 121 </li><li class="iconfont icon-yuedu"> 122 é è¯»æ¨¡å¼ 123 </li></ul></div></div> <!----> <!----> <!----></div><div class="global-ui"><div></div></div></div>
vendor: 113 bytes, lines 123-124
123 124 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
124<script src="/assets/js/app.4aaf6adf.js" defer></script>
124<script src="/assets/js/2.1cbe77ec.js" defer></script>
124<script src="/assets/js/4.f35e593d.js" defer></script>
124 125
125<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"3ec8d64138d2471e8f8c2e453ba7e3c5","r":1,"spa":2}' crossorigin="anonymous"></script>
125 126</body> 127</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.