1import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as a,c as t,a as e,f as p,b as c,w as o,d as l,o as i,e as u}from"./app-CpE2Mp5p.js";const d="/image/cloud/cloud1.jpg",r="/image/cloud/cloud1.png",k="/image/cloud/cloud2.jpg",m="/image/cloud/cloud2.png",g={},v=l(`<h1 id="æå¡æ³¨åä¸è¿ç¨è°ç¨" tabindex="-1"><a class="header-anchor" href="#æå¡æ³¨åä¸è¿ç¨è°ç¨"><span>æå¡æ³¨åä¸è¿ç¨è°ç¨</span></a></h1><h2 id="ä¸ãä»ç»" tabindex="-1"><a class="header-anchor" href="#ä¸ãä»ç»"><span>ä¸ãä»ç»</span></a></h2><p>卿åé»é©¬ååçæ¶åï¼æä»¬åç°ä¸ä¸ªé®é¢ï¼å°±æ¯è´ç©è½¦ä¸å¡ä¸éè¦æ¥è¯¢ååä¿¡æ¯ï¼ä½ååä¿¡æ¯æ¥è¯¢çé»è¾å ¨é¨è¿ç§»å°äº<code>item-service</code>æå¡ï¼å¯¼è´æä»¬æ æ³æ¥è¯¢ã</p><p>æç»ç»æå°±æ¯æ¥è¯¢å°çè´ç©è½¦æ°æ®ä¸å®æ´ï¼å æ¤è¦æ³è§£å³è¿ä¸ªé®é¢ï¼æä»¬å°±å¿ é¡»æ¹é å ¶ä¸ç代ç ï¼æåæ¬æ¬å°æ¹æ³è°ç¨ï¼æ¹é æè·¨å¾®æå¡çè¿ç¨è°ç¨ï¼RPCï¼å³<strong>R</strong>emote <strong>P</strong>roduce <strong>C</strong>allï¼ã</p><p>é£ä¹é®é¢æ¥äºï¼æä»¬è¯¥å¦ä½è·¨æå¡è°ç¨ï¼åç¡®ç说ï¼å¦ä½å¨<code>cart-service</code>ä¸è·å<code>item-service</code>æå¡ä¸çæä¾çååæ°æ®å¢ï¼</p><p>大家æèä¸ä¸ï¼æä»¬ä»¥åææ²¡æå®ç°è¿ç±»ä¼¼çè¿ç¨æ¥è¯¢çåè½å¢ï¼</p><p>çæ¡æ¯è¯å®çï¼æä»¬å端åæå¡ç«¯æ¥è¯¢æ°æ®ï¼å ¶å®å°±æ¯ä»æµè§å¨è¿ç¨æ¥è¯¢æå¡ç«¯æ°æ®ãæ¯å¦æä»¬åæéè¿Swaggeræµè¯ååæ¥è¯¢æ¥å£ï¼å°±æ¯å<code>http://localhost:8081/items</code>è¿ä¸ªæ¥å£åèµ·ç请æ±ï¼</p><h3 id="_1ãresttemplate" tabindex="-1"><a class="header-anchor" href="#_1ãresttemplate"><span>1ãRestTemplate</span></a></h3><p>Springç»æä»¬æä¾äºä¸ä¸ªRestTemplateçAPIï¼å¯ä»¥æ¹ä¾¿çå®ç°Http请æ±çåéã</p><div class="hint-container info"><p class="hint-container-title">RestTemplate使ç¨çåºæ¬æ¥éª¤å¦ä¸</p><ul><li>注åRestTemplateå°Spring容å¨</li><li>è°ç¨RestTemplateçAPIåé请æ±ï¼å¸¸è§æ¹æ³æï¼ <ul><li>getForObjectï¼åéGet请æ±å¹¶è¿åæå®ç±»å对象</li><li>PostForObjectï¼åéPost请æ±å¹¶è¿åæå®ç±»å对象</li><li>putï¼åéPUT请æ±</li><li>deleteï¼åéDelete请æ±</li><li>exchangeï¼åéä»»æç±»å请æ±ï¼è¿åResponseEntity</li></ul></li></ul></div><p>å å°RestTemplate注å为ä¸ä¸ªBeanï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>hmall<span class="token punctuation">.</span>cart<span class="token punctuation">.</span>config</span><span class="token punctuation">;</span> 2 3<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Bean</span></span><span class="token punctuation">;</span> 4<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Configuration</span></span><span class="token punctuation">;</span> 5<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>client<span class="token punctuation">.</span></span><span class="token class-name">RestTemplate</span></span><span class="token punctuation">;</span> 6 7<span class="token annotation punctuation">@Configuration</span> 8<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RemoteCallConfig</span> <span class="token punctuation">{</span> 9 10 <span class="token annotation punctuation">@Bean</span> 11 <span class="token keyword">public</span> <span class="token class-name">RestTemplate</span> <span class="token function">restTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
12 <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">RestTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 13 <span class="token punctuation">}</span> 14<span class="token punctuation">}</span> 15</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2ãè¿ç¨è°ç¨" tabindex="-1"><a class="header-anchor" href="#_2ãè¿ç¨è°ç¨"><span>2ãè¿ç¨è°ç¨</span></a></h3><p>æ¥ä¸æ¥ï¼æä»¬ä¿®æ¹<code>cart-service</code>ä¸ç<code>com.hmall.cart.service.impl.\`\`CartServiceImpl</code>ç<code>handleCartItems</code>æ¹æ³ï¼åéhttp请æ±å°<code>item-service</code>ï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code> <span class="token comment">// List<ItemDTO> items = itemService.queryItemByIds(itemIds);</span> 16 <span class="token comment">//1ãå©ç¨restTemplate åèµ·HTTP请æ±ï¼å¾å°HTTPååº</span> 17 <span class="token class-name">ResponseEntity</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">List</span><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span><span class="token punctuation">></span></span> response <span class="token operator">=</span> restTemplate<span class="token punctuation">.</span><span class="token function">exchange</span><span class="token punctuation">(</span> 18 <span class="token string">"http://192.168.175.129:8081/items?ids={ids}"</span><span class="token punctuation">,</span> <span class="token comment">//请æ±è·¯å¾</span> 19 <span class="token class-name">HttpMethod</span><span class="token punctuation">.</span><span class="token constant">GET</span><span class="token punctuation">,</span> <span class="token comment">//è¯·æ±æ¹æ³</span> 20 <span class="token keyword">null</span><span class="token punctuation">,</span> <span class="token comment">//请æ±å®ä½</span> 21 <span class="token keyword">new</span> <span class="token class-name">ParameterizedTypeReference</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">List</span><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">//è¿åå¼ç±»å</span> 22 <span class="token class-name">Map</span><span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span><span class="token string">"ids"</span><span class="token punctuation">,</span> <span class="token class-name">CollUtils</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>itemIds<span class="token punctuation">,</span> <span class="token string">","</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//请æ±åæ°</span> 23 <span class="token punctuation">)</span><span class="token punctuation">;</span> 24 <span class="token comment">//2ãè§£æååº</span>
25 <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>response<span class="token punctuation">.</span><span class="token function">getStatusCode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">is2xxSuccessful</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> 26 <span class="token keyword">return</span><span class="token punctuation">;</span> 27 <span class="token punctuation">}</span> 28 <span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span></span> items <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 29</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>å¯ä»¥çå°ï¼å©ç¨RestTemplateåéhttp请æ±ä¸å端ajaxåé请æ±é常ç¸ä¼¼ï¼é½å å«åé¨åä¿¡æ¯ï¼</p><ul><li><p>è¯·æ±æ¹å¼</p></li><li><p>请æ±è·¯å¾</p></li><li><p>请æ±åæ°</p></li><li><p>è¿åå¼ç±»å</p></li></ul><h3 id="_3ã缺ç¹" tabindex="-1"><a class="header-anchor" href="#_3ã缺ç¹"><span>3ã缺ç¹</span></a></h3><p>åå¦ååå¾®æå¡è¢«è°ç¨è¾å¤ï¼ä¸ºäºåºå¯¹æ´é«çå¹¶åï¼æä»¬è¿è¡äºå¤å®ä¾é¨ç½²æ¤æ¶ï¼æ¯ä¸ª<code>item-service</code>çå®ä¾å ¶IPæç«¯å£ä¸åï¼é®é¢æ¥äºï¼</p><ul><li>item-serviceè¿ä¹å¤å®ä¾ï¼cart-serviceå¦ä½ç¥éæ¯ä¸ä¸ªå®ä¾çå°åï¼</li><li>http请æ±è¦åurlå°åï¼<code>cart-service</code>æå¡å°åºè¯¥è°ç¨åªä¸ªå®ä¾å¢ï¼</li><li>妿å¨è¿è¡è¿ç¨ä¸ï¼æä¸ä¸ª<code>item-service</code>å®ä¾å®æºï¼<code>cart-service</code>ä¾ç¶å¨è°ç¨è¯¥æä¹åï¼</li><li>妿并å太é«ï¼<code>item-service</code>临æ¶å¤é¨ç½²äºNå°å®ä¾ï¼<code>cart-service</code>å¦ä½ç¥éæ°å®ä¾çå°åï¼</li></ul><p>为äºè§£å³ä¸è¿°é®é¢ï¼å°±å¿ é¡»å¼å ¥æ³¨åä¸å¿çæ¦å¿µäº</p><h2 id="äºãæå¡æ³¨å-nacos" tabindex="-1"><a class="header-anchor" href="#äºãæå¡æ³¨å-nacos"><span>äºãæå¡æ³¨å(Nacos)</span></a></h2><h3 id="_1ãæ³¨åä¸å¿åç" tabindex="-1"><a class="header-anchor" href="#_1ãæ³¨åä¸å¿åç"><span>1ãæ³¨åä¸å¿åç</span></a></h3><p>å¨å¾®æå¡è¿ç¨è°ç¨çè¿ç¨ä¸ï¼å æ¬ä¸¤ä¸ªè§è²ï¼</p><ul><li>æå¡æä¾è ï¼æä¾æ¥å£ä¾å ¶å®å¾®æå¡è®¿é®ï¼æ¯å¦<code>item-service</code></li><li>æå¡æ¶è´¹è ï¼è°ç¨å ¶å®å¾®æå¡æä¾çæ¥å£ï¼æ¯å¦<code>cart-service</code></li></ul><p>å¨å¤§åå¾®æå¡é¡¹ç®ä¸ï¼æå¡æä¾è çæ°éä¼é常å¤ï¼ä¸ºäºç®¡çè¿äºæå¡å°±å¼å ¥äº<strong>注åä¸å¿</strong>çæ¦å¿µãæ³¨åä¸å¿ãæå¡æä¾è ãæå¡æ¶è´¹è ä¸è é´å ³ç³»å¦ä¸ï¼</p><figure><img src="`+d+'" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><div class="hint-container tip"><p class="hint-container-title">æµç¨å¦ä¸</p><ol><li><p>æå¡å¯å¨æ¶å°±ä¼æ³¨åèªå·±çæå¡ä¿¡æ¯ï¼æå¡åãIPã端å£ï¼å°æ³¨åä¸å¿</p></li><li><p>è°ç¨è å¯ä»¥ä»æ³¨åä¸å¿è®¢é æ³è¦çæå¡ï¼è·åæå¡å¯¹åºçå®ä¾å表ï¼1个æå¡å¯è½å¤å®ä¾é¨ç½²ï¼</p></li><li><p>è°ç¨è èªå·±å¯¹å®ä¾å表è´è½½åè¡¡ï¼æéä¸ä¸ªå®ä¾</p></li><li><p>è°ç¨è å该å®ä¾åèµ·è¿ç¨è°ç¨</p></li></ol></div><p>彿塿ä¾è çå®ä¾å®æºæè å¯å¨æ°å®ä¾æ¶ï¼è°ç¨è å¦ä½å¾ç¥å¢ï¼</p><ul><li>æå¡æä¾è ä¼å®æå注åä¸å¿åé请æ±ï¼æ¥åèªå·±çå¥åº·ç¶æï¼å¿è·³è¯·æ±ï¼</li><li>彿³¨åä¸å¿é¿æ¶é´æ¶ä¸å°æä¾è çå¿è·³æ¶ï¼ä¼è®¤ä¸ºè¯¥å®ä¾å®æºï¼å°å ¶ä»æå¡çå®ä¾å表ä¸åé¤</li><li>彿塿æ°å®ä¾å¯å¨æ¶ï¼ä¼åéæ³¨åæå¡è¯·æ±ï¼å ¶ä¿¡æ¯ä¼è¢«è®°å½å¨æ³¨åä¸å¿çæå¡å®ä¾å表</li><li>彿³¨åä¸å¿æå¡åè¡¨åæ´æ¶ï¼ä¼ä¸»å¨éç¥å¾®æå¡ï¼æ´æ°æ¬å°æå¡å表</li></ul><h3 id="_2ãnacos注åä¸å¿" tabindex="-1"><a class="header-anchor" href="#_2ãnacos注åä¸å¿"><span>2ãNacos注åä¸å¿</span></a></h3><div class="hint-container info"><p class="hint-container-title">ç®å弿ºç注åä¸å¿æ¡æ¶æå¾å¤ï¼å½å æ¯è¾å¸¸è§çæ</p><ul><li>Eurekaï¼Netflixå ¬å¸åºåï¼ç®å被éæå¨SpringCloudå½ä¸ï¼ä¸è¬ç¨äºJavaåºç¨</li><li>Nacosï¼Alibabaå ¬å¸åºåï¼ç®å被éæå¨SpringCloudAlibabaä¸ï¼ä¸è¬ç¨äºJavaåºç¨</li><li>Consulï¼HashiCorpå ¬å¸åºåï¼ç®åéæå¨SpringCloudä¸ï¼ä¸éå¶å¾®æå¡è¯è¨</li></ul></div><p><strong>1ï¼é ç½®MySQL</strong></p><p>æä»¬åºäºDockeræ¥é¨ç½²Nacosçæ³¨åä¸å¿ï¼é¦å æä»¬è¦åå¤MySQLæ°æ®åºè¡¨ï¼ç¨æ¥åå¨Nacosçæ°æ®,mysqlèæ¬å¯ä»¥ä»githubä¸è½½</p><p><a href="https://github.com/alibaba/nacos/tree/develop/distribution/conf" target="_blank" rel="noopener noreferrer">ä¸è½½å°å</a></p><figure><img src="'+r+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><p><strong>2ï¼ä¿®æ¹é ç½®æä»¶</strong></p><p>å建ä¸ä¸ª<code>nacos/custom.env</code>æä»¶ï¼MYSQL_SERVICE_HOSTä¹å°±æ¯mysqlå°åï¼éè¦ä¿®æ¹ä¸ºä½ èªå·±çèææºIPå°åï¼</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>PREFER_HOST_MODE=hostname 30MODE=standalone 31SPRING_DATASOURCE_PLATFORM=mysql 32MYSQL_SERVICE_HOST=192.168.175.129 33MYSQL_SERVICE_DB_NAME=nacos 34MYSQL_SERVICE_PORT=3306 35MYSQL_SERVICE_USER=root 36MYSQL_SERVICE_PASSWORD=123 37MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai 38</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>3ï¼å建éå</strong></p><p>ç¶åï¼å°ååå建çç<code>nacos</code>ç®å½ä¸ä¼ è³èææºç<code>/root</code>
38ç®å½ãè¿å ¥rootç®å½ï¼ç¶åæ§è¡ä¸é¢çdockerå½ä»¤ï¼</p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token function">docker</span> run <span class="token parameter variable">-d</span> <span class="token punctuation">\\</span> 39<span class="token parameter variable">--name</span> nacos <span class="token punctuation">\\</span> 40--env-file ./nacos/custom.env <span class="token punctuation">\\</span> 41<span class="token parameter variable">-p</span> <span class="token number">8848</span>:8848 <span class="token punctuation">\\</span> 42<span class="token parameter variable">-p</span> <span class="token number">9848</span>:9848 <span class="token punctuation">\\</span> 43<span class="token parameter variable">-p</span> <span class="token number">9849</span>:9849 <span class="token punctuation">\\</span> 44<span class="token parameter variable">--restart</span><span class="token operator">=</span>always <span class="token punctuation">\\</span> 45nacos/nacos-server:v2.1.0-slim 46</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>å¯å¨å®æåï¼è®¿é®ä¸é¢å°åï¼http://192.168.175.129:8848/nacos/ï¼æ³¨æå°<code>192.168.175.129</code>æ¿æ¢ä¸ºä½ èªå·±çèææºIPå°åã</p><p>馿¬¡è®¿é®ä¼è·³è½¬å°ç»å½é¡µï¼<strong>è´¦å·å¯ç 齿¯nacos</strong></p><h3 id="_3ãæå¡æ³¨å" tabindex="-1"><a class="header-anchor" href="#_3ãæå¡æ³¨å"><span>3ãæå¡æ³¨å</span></a></h3><p>æ¥ä¸æ¥ï¼æä»¬æ<code>item-service</code>注åå°Nacos</p><div class="hint-container info"><p class="hint-container-title">æ¥éª¤å¦ä¸ï¼</p><ul><li>å¼å ¥ä¾èµ</li><li>é ç½®Nacoså°å</li><li>éå¯</li></ul></div><p><strong>1ï¼æ·»å ä¾èµ</strong></p><p>å¨<code>item-service</code>ç<code>pom.xml</code>䏿·»å ä¾èµï¼</p><div class="language-xml line-numbers-mode" data-ext="xml" data-title="xml"><pre class="language-xml"><code><span class="token comment"><!--nacos æå¡æ³¨ååç°--></span> 47<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 48 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.alibaba.cloud<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 49 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-cloud-starter-alibaba-nacos-discovery<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 50<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 51</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2ï¼é ç½®Nacos</strong></p><p>å¨<code>item-service</code>ç<code>application.yml</code>䏿·»å nacoså°åé ç½®ï¼</p><div class="language-yaml line-numbers-mode" data-ext="yml" data-title="yml"><pre class="language-yaml"><code><span class="token key atrule">spring</span><span class="token punctuation">:</span> 52 <span class="token key atrule">application</span><span class="token punctuation">:</span> 53 <span class="token key atrule">name</span><span class="token punctuation">:</span> item<span class="token punctuation">-</span>service <span class="token comment"># æå¡åç§°</span> 54 <span class="token key atrule">cloud</span><span class="token punctuation">:</span> 55 <span class="token key atrule">nacos</span><span class="token punctuation">:</span>
56 <span class="token key atrule">server-addr</span><span class="token punctuation">:</span> 192.168.150.101<span class="token punctuation">:</span><span class="token number">8848</span> <span class="token comment"># nacoså°å</span> 57</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>3ï¼å¯å¨</strong></p><p>ç¶åé ç½®å¯å¨é¡¹ï¼æ³¨æéå½åå¹¶ä¸é ç½®æ°ç端å£ï¼é¿å å²çªã</p><p><code>VM options: -Dserver.port=8083</code></p><p>访é®nacosæ§å¶å°ï¼å¯ä»¥åç°æå¡æ³¨åæåã</p><h3 id="_4ãæå¡åç°" tabindex="-1"><a class="header-anchor" href="#_4ãæå¡åç°"><span>4ãæå¡åç°</span></a></h3><p>æå¡çæ¶è´¹è è¦å»nacosè®¢é æå¡ï¼è¿ä¸ªè¿ç¨å°±æ¯æå¡åç°</p><div class="hint-container info"><p class="hint-container-title">æ¥éª¤å¦ä¸ï¼</p><ul><li>å¼å ¥ä¾èµ</li><li>é ç½®Nacoså°å</li><li>åç°å¹¶è°ç¨æå¡</li></ul></div><p><strong>1ï¼å¼å ¥ä¾èµ</strong></p><p>æå¡åç°é¤äºè¦å¼å ¥nacosä¾èµä»¥å¤ï¼ç±äºè¿éè¦è´è½½åè¡¡ï¼å æ¤è¦å¼å ¥SpringCloudæä¾çLoadBalancerä¾èµã</p><p>æä»¬å¨<code>cart-service</code>ä¸ç<code>pom.xml</code>䏿·»å ä¸é¢çä¾èµï¼</p><div class="language-xml line-numbers-mode" data-ext="xml" data-title="xml"><pre class="language-xml"><code><span class="token comment"><!--nacos æå¡æ³¨ååç°--></span> 58<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 59 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.alibaba.cloud<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 60 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-cloud-starter-alibaba-nacos-discovery<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 61<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 62</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2ï¼é ç½®Nacoså°å</strong></p><p>å¨<code>cart-service</code>ç<code>application.yml</code>䏿·»å nacoså°åé ç½®ï¼</p><div class="language-yaml line-numbers-mode" data-ext="yml" data-title="yml"><pre class="language-yaml"><code><span class="token key atrule">spring</span><span class="token punctuation">:</span> 63 <span class="token key atrule">cloud</span><span class="token punctuation">:</span> 64 <span class="token key atrule">nacos</span><span class="token punctuation">:</span> 65 <span class="token key atrule">server-addr</span><span class="token punctuation">:</span> 192.168.150.101<span class="token punctuation">:</span><span class="token number">8848</span> 66</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>3ï¼åç°å¹¶è°ç¨æå¡</strong></p><p>æ¥ä¸æ¥ï¼æå¡è°ç¨è <code>cart-service</code>å°±å¯ä»¥å»è®¢é <code>item-service</code>æå¡äºãä¸è¿item-serviceæå¤ä¸ªå®ä¾ï¼èçæ£åèµ·è°ç¨æ¶åªéè¦ç¥éä¸ä¸ªå®ä¾çå°åã</p><p>å æ¤ï¼æå¡è°ç¨è å¿ é¡»å©ç¨è´è½½åè¡¡çç®æ³ï¼ä»å¤ä¸ªå®ä¾ä¸æéä¸ä¸ªå»è®¿é®ã常è§çè´è½½åè¡¡ç®æ³æï¼</p><ul><li>éæº</li><li>轮询</li><li>IPçhash</li><li>æè¿æå°è®¿é®</li><li>...</li></ul><p>è¿éæä»¬å¯ä»¥éæ©æç®åçéæºè´è½½åè¡¡ã</p><p>å¦å¤ï¼æå¡åç°éè¦ç¨å°ä¸ä¸ªå·¥å ·ï¼<code>DiscoveryClient</code>ï¼SpringCloudå·²ç»å¸®æä»¬èªå¨è£ é ï¼æä»¬å¯ä»¥ç´æ¥æ³¨å ¥ä½¿ç¨ï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code>
66 <span class="token comment">//2.1ãæ ¹æ®æå¡åç§°è·åæå¡å表</span> 67 <span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">ServiceInstance</span><span class="token punctuation">></span></span> instances <span class="token operator">=</span> discoveryClient<span class="token punctuation">.</span><span class="token function">getInstances</span><span class="token punctuation">(</span><span class="token string">"item-service"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 68 <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name">CollUtils</span><span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>instances<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 69 <span class="token keyword">return</span><span class="token punctuation">;</span> 70 <span class="token punctuation">}</span> 71 <span class="token comment">//2.2ãæåè´è½½åè¡¡ï¼ä»å®ä¾å表ä¸éæ©ä¸ä¸ªå®ä¾ </span> 72 <span class="token class-name">ServiceInstance</span> instance <span class="token operator">=</span> instances<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token class-name">RandomUtil</span><span class="token punctuation">.</span><span class="token function">randomInt</span><span class="token punctuation">(</span>instances<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//éæºè´è½½åè¡¡</span> 73 74 <span class="token comment">//2.3.1ãå©ç¨restTemplate åèµ·HTTP请æ±ï¼å¾å°HTTPååº</span> 75 <span class="token class-name">ResponseEntity</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">List</span><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span><span class="token punctuation">></span></span> response <span class="token operator">=</span> restTemplate<span class="token punctuation">.</span><span class="token function">exchange</span><span class="token punctuation">(</span> 76 instance<span class="token punctuation">.</span><span class="token function">getUri</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"/items?ids={ids}"</span><span class="token punctuation">,</span> 77 <span class="token class-name">HttpMethod</span><span class="token punctuation">.</span><span class="token constant">GET</span><span class="token punctuation">,</span> 78 <span class="token keyword">null</span><span class="token punctuation">,</span> 79 <span class="token keyword">new</span> <span class="token class-name">ParameterizedTypeReference</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">List</span><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 80 <span class="token punctuation">}</span><span class="token punctuation">,</span> 81 <span class="token class-name">Map</span><span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span><span class="token string">"ids"</span><span class="token punctuation">,</span> <span class="token class-name">CollUtils</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>itemIds<span class="token punctuation">,</span> <span class="token string">","</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
82 <span class="token punctuation">)</span><span class="token punctuation">;</span> 83 <span class="token comment">//2.3.2ãè§£æååº</span> 84 <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>response<span class="token punctuation">.</span><span class="token function">getStatusCode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">is2xxSuccessful</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> 85 <span class="token keyword">return</span><span class="token punctuation">;</span> 86 <span class="token punctuation">}</span> 87 <span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span></span> items <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 88</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ä¸ãè¿ç¨è°ç¨-openfeign" tabindex="-1"><a class="header-anchor" href="#ä¸ãè¿ç¨è°ç¨-openfeign"><span>ä¸ãè¿ç¨è°ç¨(OpenFeign)</span></a></h2><p>â æä»¬å©ç¨Nacoså®ç°äºæå¡çæ²»çï¼å©ç¨RestTemplateå®ç°äºæå¡çè¿ç¨è°ç¨ã使¯è¿ç¨è°ç¨ç代ç å¤ªå¤æäºï¼èä¸è¿ç§è°ç¨æ¹å¼ï¼ä¸åæ¬çæ¬å°æ¹æ³è°ç¨å·®å¼å¤ªå¤§ï¼ç¼ç¨æ¶çä½éªä¹ä¸ç»ä¸ï¼ä¸ä¼å¿è¿ç¨è°ç¨ï¼ä¸ä¼å¿æ¬å°è°ç¨ãå æ¤ï¼æä»¬å¿ é¡»æ³åæ³æ¹åè¿ç¨è°ç¨çå¼å模å¼ï¼è®©<strong>è¿ç¨è°ç¨åæ¬å°æ¹æ³è°ç¨ä¸æ ·ç®å</strong>ãèè¿å°±è¦ç¨å°<strong>OpenFeign</strong>ç»ä»¶äºã</p><div class="hint-container tip"><p class="hint-container-title">å ¶å®è¿ç¨è°ç¨çå ³é®ç¹å°±å¨äºå个ï¼</p><ul><li>è¯·æ±æ¹å¼</li><li>请æ±è·¯å¾</li><li>请æ±åæ°</li><li>è¿åå¼ç±»å</li></ul></div><p>æä»¥ï¼OpenFeignå°±å©ç¨SpringMVCçç¸å ³æ³¨è§£æ¥å£°æä¸è¿°4ä¸ªåæ°ï¼ç¶ååºäºå¨æä»£ç帮æä»¬çæè¿ç¨è°ç¨ç代ç ï¼èæ éæä»¬æå¨åç¼åï¼é常æ¹ä¾¿ã</p><h3 id="_1ãå¿«éå ¥é¨" tabindex="-1"><a class="header-anchor" href="#_1ãå¿«éå ¥é¨"><span>1ãå¿«éå ¥é¨</span></a></h3><p><strong>1ï¼å¼å ¥ä¾èµ</strong></p><p>å¨<code>cart-service</code>æå¡çpom.xmlä¸å¼å ¥<code>OpenFeign</code>çä¾èµå<code>loadBalancer</code>ä¾èµï¼</p><div class="language-xml line-numbers-mode" data-ext="xml" data-title="xml"><pre class="language-xml"><code> <span class="token comment"><!--openFeign--></span> 89 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 90 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.cloud<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span>
91 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-cloud-starter-openfeign<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 92 <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 93 <span class="token comment"><!--è´è½½åè¡¡å¨--></span> 94 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 95 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.cloud<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 96 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-cloud-starter-loadbalancer<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 97 <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 98</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2ï¼å¯ç¨OpenFeign</strong></p><p>æ¥ä¸æ¥ï¼æä»¬å¨<code>cart-service</code>ç<code>CartApplication</code>å¯å¨ç±»ä¸æ·»å 注解ï¼å¯å¨OpenFeignåè½ï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code><span class="token annotation punctuation">@EnableFeignClients</span> 99<span class="token annotation punctuation">@MapperScan</span><span class="token punctuation">(</span><span class="token string">"com.hmall.cart.mapper"</span><span class="token punctuation">)</span> 100<span class="token annotation punctuation">@SpringBootApplication</span> 101<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CartApplication</span> <span class="token punctuation">{</span> 102 <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> 103 <span class="token class-name">SpringApplication</span><span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token class-name">CartApplication</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> 104 <span class="token punctuation">}</span> 105 106 <span class="token annotation punctuation">@Bean</span> 107 <span class="token keyword">public</span> <span class="token class-name">RestTemplate</span> <span class="token function">restTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 108 <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">RestTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 109 <span class="token punctuation">}</span> 110<span class="token punctuation">}</span> 111</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>3ï¼ç¼åOpenFeign客æ·ç«¯</strong></p><p>å¨<code>cart-service</code>ä¸ï¼å®ä¹ä¸ä¸ªæ°çæ¥å£ï¼ç¼åFeign客æ·ç«¯ï¼</p><p>å ¶ä¸ä»£ç å¦ä¸ï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>hmall<span class="token punctuation">.</span>cart<span class="token punctuation">.</span>client</span><span class="token punctuation">;</span> 112 113<span class="token keyword">
113import</span> <span class="token import"><span class="token namespace">com<span class="token punctuation">.</span>hmall<span class="token punctuation">.</span>cart<span class="token punctuation">.</span>domain<span class="token punctuation">.</span>dto<span class="token punctuation">.</span></span><span class="token class-name">ItemDTO</span></span><span class="token punctuation">;</span> 114<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>cloud<span class="token punctuation">.</span>openfeign<span class="token punctuation">.</span></span><span class="token class-name">FeignClient</span></span><span class="token punctuation">;</span> 115<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">GetMapping</span></span><span class="token punctuation">;</span> 116<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">RequestParam</span></span><span class="token punctuation">;</span> 117 118<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span></span><span class="token punctuation">;</span> 119 120<span class="token annotation punctuation">@FeignClient</span><span class="token punctuation">(</span><span class="token string">"item-service"</span><span class="token punctuation">)</span> 121<span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">ItemClient</span> <span class="token punctuation">{</span> 122 123 <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/items"</span><span class="token punctuation">)</span> 124 <span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">ItemDTO</span><span class="token punctuation">></span></span> <span class="token function">queryItemByIds</span><span class="token punctuation">(</span><span class="token annotation punctuation">@RequestParam</span><span class="token punctuation">(</span><span class="token string">"ids"</span><span class="token punctuation">)</span> <span class="token class-name">Collection</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">Long</span><span class="token punctuation">></span></span> ids<span class="token punctuation">)</span><span class="token punctuation">;</span> 125<span class="token punctuation">}</span> 126</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>è¿éåªéè¦å£°ææ¥å£ï¼æ éå®ç°æ¹æ³</p><div class="hint-container tip"><p class="hint-container-title">æ¥å£ä¸çå ä¸ªå ³é®ä¿¡æ¯</p><ul><li><code>@FeignClient("item-service")</code> ï¼å£°ææå¡åç§°</li><li><code>@GetMapping</code> ï¼å£°æè¯·æ±æ¹å¼</li><li><code>@GetMapping("/items")</code> ï¼å£°æè¯·æ±è·¯å¾</li><li><code>@RequestParam("ids") Collection<Long> ids</code> ï¼å£°æè¯·æ±åæ°</li><li><code>List<ItemDTO></code> ï¼è¿åå¼ç±»å</li></ul></div><p><strong>4ï¼ä½¿ç¨FeignClient</strong></p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code><span class="token class-name">List</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">
126ItemDTO</span><span class="token punctuation">></span></span> items <span class="token operator">=</span> itemClient<span class="token punctuation">.</span><span class="token function">queryItemByIds</span><span class="token punctuation">(</span>itemIds<span class="token punctuation">)</span><span class="token punctuation">;</span> 127</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>feignæ¿æä»¬å®æäºæå¡æåãè´è½½åè¡¡ãåéhttp请æ±çææå·¥ä½ã</p><h3 id="_2ãè¿æ¥æ± " tabindex="-1"><a class="header-anchor" href="#_2ãè¿æ¥æ± "><span>2ãè¿æ¥æ± </span></a></h3><p>Feignåºå±åèµ·http请æ±ï¼ä¾èµäºå ¶å®çæ¡æ¶ã</p><div class="hint-container info"><p class="hint-container-title">å ¶åºå±æ¯æçhttp客æ·ç«¯å®ç°å æ¬</p><ul><li>HttpURLConnectionï¼é»è®¤å®ç°ï¼ä¸æ¯æè¿æ¥æ± </li><li>Apache HttpClient ï¼æ¯æè¿æ¥æ± </li><li>OKHttpï¼æ¯æè¿æ¥æ± </li></ul></div><p>å æ¤æä»¬é常ä¼ä½¿ç¨å¸¦æè¿æ¥æ± ç客æ·ç«¯æ¥ä»£æ¿é»è®¤çHttpURLConnectionãæ¯å¦ï¼æä»¬ä½¿ç¨OK Http.</p><p><strong>1ï¼å¼å ¥ä¾èµ</strong></p><p>å¨<code>cart-service</code>ç<code>pom.xml</code>ä¸å¼å ¥ä¾èµï¼</p><div class="language-xml line-numbers-mode" data-ext="xml" data-title="xml"><pre class="language-xml"><code><span class="token comment"><!--OK http çä¾èµ --></span> 128<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 129 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>io.github.openfeign<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 130 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>feign-okhttp<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 131<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 132</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2ï¼å¼å¯è¿æ¥æ± </strong></p><p>å¨<code>cart-service</code>ç<code>application.yml</code>é ç½®æä»¶ä¸å¼å¯Feignçè¿æ¥æ± åè½ï¼</p><div class="language-yaml line-numbers-mode" data-ext="yml" data-title="yml"><pre class="language-yaml"><code><span class="token key atrule">feign</span><span class="token punctuation">:</span> 133 <span class="token key atrule">okhttp</span><span class="token punctuation">:</span> 134 <span class="token key atrule">enabled</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># å¼å¯OKHttpåè½</span> 135</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>é坿å¡ï¼è¿æ¥æ± å°±çæäºã</p><h3 id="_3ãç»æä¼å" tabindex="-1"><a class="header-anchor" href="#_3ãç»æä¼å"><span>3ãç»æä¼å</span></a></h3><p>妿æåäºäº¤æå¾®æå¡ï¼<code>trade-service</code>ï¼ï¼å®ä¹éè¦è¿ç¨è°ç¨<code>item-service</code>ä¸çæ ¹æ®idæ¹éæ¥è¯¢åååè½ãè¿ä¸ªéæ±ä¸<code>cart-service</code>䏿¯ä¸æ ·çãå æ¤ï¼æä»¬å°±éè¦å¨<code>trade-service</code>ä¸å次å®ä¹<code>ItemClient</code>æ¥å£ï¼è¿ä¸æ¯éå¤ç¼ç åï¼ æä»ä¹åæ³è½å é¿å éå¤ç¼ç å¢ï¼</p><h4 id="_1-æè·¯åæ" tabindex="-1"><a class="header-anchor" href="#_1-æè·¯åæ"><span>1ï¼æè·¯åæ</span></a></h4><p>é¿å éå¤ç¼ç ç忳就æ¯<strong>æ½å</strong>ãä¸è¿è¿éæä¸¤ç§æ½åæè·¯ï¼</p><ul><li>æè·¯1ï¼æ½åå°å¾®æå¡ä¹å¤çå ¬å ±module</li><li>æè·¯2ï¼æ¯ä¸ªå¾®æå¡èªå·±æ½åä¸ä¸ªmodule</li></ul><figure><img src="`+k+'" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><p>æ¹æ¡1æ½åæ´å ç®åï¼å·¥ç¨ç»æä¹æ¯è¾æ¸ æ°ï¼ä½ç¼ºç¹æ¯æ´ä¸ªé¡¹ç®è¦å度åé«ã</p><p>æ¹æ¡2æ½åç¸å¯¹éº»ç¦ï¼å·¥ç¨ç»æç¸å¯¹æ´å¤æï¼ä½æå¡ä¹é´è¦å度éä½ã</p><h4 id="_2-æ½åfeign客æ·ç«¯" tabindex="-1"><a class="header-anchor" href="#_2-æ½åfeign客æ·ç«¯"><span>2ï¼æ½åFeign客æ·ç«¯</span></a></h4><p>å¨<code>hmall</code>ä¸å®ä¹ä¸ä¸ªæ°çmoduleï¼å½å为hm-apiï¼ç¶åæItemDTOåItemClient齿·è´è¿æ¥ï¼æç»ç»æå¦ä¸ï¼</p><figure><img src="'+m+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><p>ç°å¨ï¼ä»»ä½å¾®æå¡è¦è°ç¨<code>item-service</code>ä¸çæ¥å£ï¼åªéè¦å¼å ¥<code>hm-api</code>模åä¾èµå³å¯ï¼æ éèªå·±ç¼åFeign客æ·ç«¯äºã</p><p>æ¥ä¸æ¥ï¼æä»¬å¨<code>cart-service</code>ç<code>pom.xml</code>ä¸å¼å ¥<code>hm-api</code>模åï¼</p><div class="language-xml line-numbers-mode" data-ext="xml" data-title="xml"><pre class="language-xml"><code> <span class="token comment"><!--feign模å--></span> 136 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span>
137 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.heima<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 138 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>hm-api<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 139 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>1.0.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> 140 <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 141</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container warning"><p class="hint-container-title">å¯å¨ç±»ä¸æ·»å 声æ</p><p>å¨cart-serviceçå¯å¨ç±»ä¸æ·»å 声æ</p><p><code>@EnableFeignClients(basePackages = "com.hmall.api.client")</code></p><p>æè 声æè¦ç¨çFeignClient</p><p><code>@EnableFeignClients(clients= {ItemClient.class})</code></p><p>å¦å伿«æä¸å°<code>ItemClient</code>ï¼ä»èæ¥é</p></div><h3 id="_4ãæ¥å¿é ç½®" tabindex="-1"><a class="header-anchor" href="#_4ãæ¥å¿é ç½®"><span>4ãæ¥å¿é ç½®</span></a></h3><p>OpenFeignåªä¼å¨FeignClientæå¨å çæ¥å¿çº§å«ä¸º<strong>DEBUG</strong>æ¶ï¼æä¼è¾åºæ¥å¿ãèä¸å ¶æ¥å¿çº§å«æ4级ï¼</p><ul><li><strong>NONE</strong>ï¼ä¸è®°å½ä»»ä½æ¥å¿ä¿¡æ¯ï¼è¿æ¯é»è®¤å¼ã</li><li><strong>BASIC</strong>ï¼ä» è®°å½è¯·æ±çæ¹æ³ï¼URL以åååºç¶æç åæ§è¡æ¶é´</li><li><strong>HEADERS</strong>ï¼å¨BASICçåºç¡ä¸ï¼é¢å¤è®°å½äºè¯·æ±åååºç头信æ¯</li><li><strong>FULL</strong>ï¼è®°å½ææè¯·æ±åååºçæç»ï¼å æ¬å¤´ä¿¡æ¯ã请æ±ä½ãå æ°æ®ã</li></ul><p>Feigné»è®¤çæ¥å¿çº§å«å°±æ¯NONEï¼æä»¥é»è®¤æä»¬çä¸å°è¯·æ±æ¥å¿ã</p><p><strong>1ï¼å®ä¹æ¥å¿çº§å«</strong></p><p>å¨hm-api模å䏿°å»ºä¸ä¸ªé 置类ï¼å®ä¹Feignçæ¥å¿çº§å«ï¼</p><div class="language-java line-numbers-mode" data-ext="java" data-title="java"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>hmall<span class="token punctuation">.</span>api<span class="token punctuation">.</span>config</span><span class="token punctuation">;</span> 142 143<span class="token keyword">import</span> <span class="token import"><span class="token namespace">feign<span class="token punctuation">.</span></span><span class="token class-name">Logger</span></span><span class="token punctuation">;</span> 144<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Bean</span></span><span class="token punctuation">;</span> 145 146<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DefaultFeignConfig</span> <span class="token punctuation">{</span> 147 <span class="token annotation punctuation">@Bean</span> 148 <span class="token keyword">public</span> <span class="token class-name">Logger<span class="token punctuation">.</span>Level</span> <span class="token function">feignLogLevel</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
149 <span class="token keyword">return</span> <span class="token class-name">Logger<span class="token punctuation">.</span>Level</span><span class="token punctuation">.</span><span class="token constant">FULL</span><span class="token punctuation">;</span> 150 <span class="token punctuation">}</span> 151<span class="token punctuation">}</span> 152</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2ï¼é ç½®</strong></p><p>æ¥ä¸æ¥ï¼è¦è®©æ¥å¿çº§å«çæï¼è¿éè¦é ç½®è¿ä¸ªç±»ãæä¸¤ç§æ¹å¼ï¼</p><ul><li><strong>å±é¨</strong>çæï¼å¨æä¸ª<code>FeignClient</code>ä¸é ç½®ï¼åªå¯¹å½å<code>FeignClient</code>çæ</li></ul><div class="language-Java line-numbers-mode" data-ext="Java" data-title="Java"><pre class="language-Java"><code>@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class) 153</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><strong>å ¨å±</strong>çæï¼å¨<code>@EnableFeignClients</code>ä¸é ç½®ï¼é对ææ<code>FeignClient</code>çæã</li></ul><div class="language-Java line-numbers-mode" data-ext="Java" data-title="Java"><pre class="language-Java"><code>@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class) 154</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="_5ãopenfeign-ä¼ éç¨æ·" tabindex="-1"><a class="header-anchor" href="#_5ãopenfeign-ä¼ éç¨æ·"><span>5ãOPenFeign ä¼ éç¨æ·</span></a></h3>`,134);function b(h,f){const n=a("RouteLink");return i(),t("div",null,[e("more-"),v,p("p",null,[c(n,{to:"/posts/old%E5%AD%98%E6%A1%A3/springcloud/%E7%BB%9F%E4%B8%80%E7%BD%91%E5%85%B3%E8%B7%AF%E7%94%B1_4.html"},{default:o(()=>[u("åèç½å ³é¨å")]),_:1})])])}const x=s(g,[["render",b],["__file","æå¡æ³¨åä¸è¿ç¨è°ç¨.html.vue"]]),C=JSON.parse('{"path":"/posts/old%E5%AD%98%E6%A1%A3/springcloud/%E6%9C%8D%E5%8A%A1%E6%B3%A8%E5%86%8C%E4%B8%8E%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8.html","title":"æå¡æ³¨åä¸è¿ç¨è°ç¨","lang":"zh-CN","frontmatter":{"title":"æå¡æ³¨åä¸è¿ç¨è°ç¨","date":"2024-06-21T00:00:00.000Z","tags":"SpringCloud","category":"SpringCloud","order":3,"icon":"/img/nacos.svg","description":"æå¡æ³¨åä¸è¿ç¨è°ç¨ ä¸ãä»ç» 卿åé»é©¬ååçæ¶åï¼æä»¬åç°ä¸ä¸ªé®é¢ï¼å°±æ¯è´ç©è½¦ä¸å¡ä¸éè¦æ¥è¯¢ååä¿¡æ¯ï¼ä½ååä¿¡æ¯æ¥è¯¢çé»è¾å ¨é¨è¿ç§»å°äºitem-serviceæå¡ï¼å¯¼è´æä»¬æ æ³æ¥è¯¢ã æç»ç»æå°±æ¯æ¥è¯¢å°çè´ç©è½¦æ°æ®ä¸å®æ´ï¼å æ¤è¦æ³è§£å³è¿ä¸ªé®é¢ï¼æä»¬å°±å¿ é¡»æ¹é å ¶ä¸ç代ç ï¼æåæ¬æ¬å°æ¹æ³è°ç¨ï¼æ¹é æè·¨å¾®æå¡çè¿ç¨è°ç¨ï¼RPCï¼å³Remote Produc...","head":[["meta",{"property":"og:url","content":"https://mister-hope.github.io/posts/old%E5%AD%98%E6%A1%A3/springcloud/%E6%9C%8D%E5%8A%A1%E6%B3%A8%E5%86%8C%E4%B8%8E%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8.html"}],["meta",{"property":"og:site_name","content":"Lance"}],["meta",{"property":"og:title","content":"æå¡æ³¨åä¸è¿ç¨è°ç¨"}],["meta",{"property":"og:description","content":"æå¡æ³¨åä¸è¿ç¨è°ç¨ ä¸ãä»ç» 卿åé»é©¬ååçæ¶åï¼æä»¬åç°ä¸ä¸ªé®é¢ï¼å°±æ¯è´ç©è½¦ä¸å¡ä¸éè¦æ¥è¯¢ååä¿¡æ¯ï¼ä½ååä¿¡æ¯æ¥è¯¢çé»è¾å ¨é¨è¿ç§»å°äºitem-serviceæå¡ï¼å¯¼è´æä»¬æ æ³æ¥è¯¢ã æç»ç»æå°±æ¯æ¥è¯¢å°çè´ç©è½¦æ°æ®ä¸å®æ´ï¼å æ¤è¦æ³è§£å³è¿ä¸ªé®é¢ï¼æä»¬å°±å¿ é¡»æ¹é å ¶ä¸ç代ç ï¼æåæ¬æ¬å°æ¹æ³è°ç¨ï¼æ¹é æè·¨å¾®æå¡çè¿ç¨è°ç¨ï¼RPCï¼å³Remote Produc..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://mister-hope.github.io/image/cloud/cloud1.jpg"}],["meta",{"property":"og:locale","content":"zh-CN"}
154],["meta",{"property":"og:updated_time","content":"2026-02-10T11:21:07.000Z"}],["meta",{"property":"article:author","content":"RuyiWei"}],["meta",{"property":"article:published_time","content":"2024-06-21T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2026-02-10T11:21:07.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"æå¡æ³¨åä¸è¿ç¨è°ç¨\\",\\"image\\":[\\"https://mister-hope.github.io/image/cloud/cloud1.jpg\\",\\"https://mister-hope.github.io/image/cloud/cloud1.png\\",\\"https://mister-hope.github.io/image/cloud/cloud2.jpg\\",\\"https://mister-hope.github.io/image/cloud/cloud2.png\\"],\\"datePublished\\":\\"2024-06-21T00:00:00.000Z\\",\\"dateModified\\":\\"2026-02-10T11:21:07.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"RuyiWei\\"}]}"]]},"headers":[{"level":2,"title":"ä¸ãä»ç»","slug":"ä¸ãä»ç»","link":"#ä¸ãä»ç»","children":[{"level":3,"title":"1ãRestTemplate","slug":"_1ãresttemplate","link":"#_1ãresttemplate","children":[]},{"level":3,"title":"2ãè¿ç¨è°ç¨","slug":"_2ãè¿ç¨è°ç¨","link":"#_2ãè¿ç¨è°ç¨","children":[]},{"level":3,"title":"3ã缺ç¹","slug":"_3ã缺ç¹","link":"#_3ã缺ç¹","children":[]}]},{"level":2,"title":"äºãæå¡æ³¨å(Nacos)","slug":"äºãæå¡æ³¨å-nacos","link":"#äºãæå¡æ³¨å-nacos","children":[{"level":3,"title":"1ãæ³¨åä¸å¿åç","slug":"_1ãæ³¨åä¸å¿åç","link":"#_1ãæ³¨åä¸å¿åç","children":[]},{"level":3,"title":"2ãNacos注åä¸å¿","slug":"_2ãnacos注åä¸å¿","link":"#_2ãnacos注åä¸å¿","children":[]},{"level":3,"title":"3ãæå¡æ³¨å","slug":"_3ãæå¡æ³¨å","link":"#_3ãæå¡æ³¨å","children":[]},{"level":3,"title":"4ãæå¡åç°","slug":"_4ãæå¡åç°","link":"#_4ãæå¡åç°","children":[]}]},{"level":2,"title":"ä¸ãè¿ç¨è°ç¨(OpenFeign)","slug":"ä¸ãè¿ç¨è°ç¨-openfeign","link":"#ä¸ãè¿ç¨è°ç¨-openfeign","children":[{"level":3,"title":"1ãå¿«éå
¥é¨","slug":"_1ãå¿«éå
¥é¨","link":"#_1ãå¿«éå
¥é¨","children":[]},{"level":3,"title":"2ãè¿æ¥æ± ","slug":"_2ãè¿æ¥æ± ","link":"#_2ãè¿æ¥æ± ","children":[]},{"level":3,"title":"3ãç»æä¼å","slug":"_3ãç»æä¼å","link":"#_3ãç»æä¼å","children":[]},{"level":3,"title":"4ãæ¥å¿é
ç½®","slug":"_4ãæ¥å¿é
ç½®","link":"#_4ãæ¥å¿é
ç½®","children":[]},{"level":3,"title":"5ãOPenFeign ä¼ éç¨æ·","slug":"_5ãopenfeign-ä¼ éç¨æ·","link":"#_5ãopenfeign-ä¼ éç¨æ·","children":[]}]}],"git":{"createdTime":1719643575000,"updatedTime":1770722467000,"contributors":[{"name":"weiruyi","email":"[email protected]","commits":1}]},"readingTime":{"minutes":11.33,"words":3399},"filePathRelative":"posts/oldåæ¡£/springcloud/æå¡æ³¨åä¸è¿ç¨è°ç¨.md","localizedDate":"2024å¹´6æ21æ¥","excerpt":"<!--more--->\\n<h1>æå¡æ³¨åä¸è¿ç¨è°ç¨</h1>\\n<h2>ä¸ãä»ç»</h2>\\n<p>卿åé»é©¬ååçæ¶åï¼æä»¬åç°ä¸ä¸ªé®é¢ï¼å°±æ¯è´ç©è½¦ä¸å¡ä¸éè¦æ¥è¯¢ååä¿¡æ¯ï¼ä½ååä¿¡æ¯æ¥è¯¢çé»è¾å
¨é¨è¿ç§»å°äº<code>item-service</code>æå¡ï¼å¯¼è´æä»¬æ æ³æ¥è¯¢ã</p>\\n<p>æç»ç»æå°±æ¯æ¥è¯¢å°çè´ç©è½¦æ°æ®ä¸å®æ´ï¼å æ¤è¦æ³è§£å³è¿ä¸ªé®é¢ï¼æä»¬å°±å¿
é¡»æ¹é å
¶ä¸ç代ç ï¼æåæ¬æ¬å°æ¹æ³è°ç¨ï¼æ¹é æè·¨å¾®æå¡çè¿ç¨è°ç¨ï¼RPCï¼å³<strong>R</strong>emote <strong>P</strong>roduce <strong>C</strong>allï¼ã</p>\\n<p>é£ä¹é®é¢æ¥äºï¼æä»¬è¯¥å¦ä½è·¨æå¡è°ç¨ï¼åç¡®ç说ï¼å¦ä½å¨<code>cart-service</code>ä¸è·å<code>item-service</code>æå¡ä¸çæä¾çååæ°æ®å¢ï¼</p>","autoDesc":true}');export{x as comp,C as data};
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.