|
28 | 28 | <meta property="og:description" content="微服务 微服务:解决接口越来越多,单体应用运行缓慢问题。 服务间调用 一个服务只调用一张表。当一个服务需要调用其他表时,使用HTTP调用其他微服务。 Commons 新建一个commons模块,用于存放全局使用的Entity <dependency> <groupId>com.example</groupId> <artifactId"> |
29 | 29 | <meta property="og:locale" content="zh_CN"> |
30 | 30 | <meta property="article:published_time" content="2024-12-31T16:00:00.000Z"> |
31 | | -<meta property="article:modified_time" content="2025-01-04T02:50:45.907Z"> |
| 31 | +<meta property="article:modified_time" content="2025-01-06T12:00:15.755Z"> |
32 | 32 | <meta property="article:author" content="SIMULEITE"> |
33 | 33 | <meta property="article:tag" content="笔记"> |
34 | 34 | <meta property="article:tag" content="Spring"> |
|
142 | 142 | <div class="sidebar-panel-container"> |
143 | 143 | <!--noindex--> |
144 | 144 | <div class="post-toc-wrap sidebar-panel"> |
145 | | - <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%BE%AE%E6%9C%8D%E5%8A%A1"><span class="nav-text"> 微服务</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8"><span class="nav-text"> 服务间调用</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#commons"><span class="nav-text"> Commons</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#resttemplate"><span class="nav-text"> RestTemplate</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#eureka"><span class="nav-text"> Eureka</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%B7%BB%E5%8A%A0%E4%BE%9D%E8%B5%96"><span class="nav-text"> 添加依赖</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95"><span class="nav-text"> 踩坑记录</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%89%BE%E4%B8%8D%E5%88%B0mapper"><span class="nav-text"> 找不到Mapper</span></a></li></ol></li></ol></div> |
| 145 | + <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%BE%AE%E6%9C%8D%E5%8A%A1"><span class="nav-text"> 微服务</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8"><span class="nav-text"> 服务间调用</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#commons"><span class="nav-text"> Commons</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#resttemplate"><span class="nav-text"> RestTemplate</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#eureka"><span class="nav-text"> Eureka</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%B7%BB%E5%8A%A0%E4%BE%9D%E8%B5%96"><span class="nav-text"> 添加依赖</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#hystrix-%E6%9C%8D%E5%8A%A1%E7%86%94%E6%96%AD%E5%B7%B2%E5%BC%83%E7%94%A8"><span class="nav-text"> Hystrix 服务熔断(已弃用)</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%9C%8D%E5%8A%A1%E9%99%8D%E7%BA%A7"><span class="nav-text"> 服务降级</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%9C%8D%E5%8A%A1%E7%86%94%E6%96%AD"><span class="nav-text"> 服务熔断</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#openfeign-%E6%9C%8D%E5%8A%A1%E9%99%8D%E7%BA%A7"><span class="nav-text"> OpenFeign 服务降级</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95"><span class="nav-text"> 踩坑记录</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%89%BE%E4%B8%8D%E5%88%B0mapper"><span class="nav-text"> 找不到Mapper</span></a></li></ol></li></ol></div> |
146 | 146 | </div> |
147 | 147 | <!--/noindex--> |
148 | 148 |
|
@@ -224,7 +224,7 @@ <h1 class="post-title" itemprop="name headline"> |
224 | 224 | <i class="far fa-calendar-check"></i> |
225 | 225 | </span> |
226 | 226 | <span class="post-meta-item-text">更新于</span> |
227 | | - <time title="修改时间:2025-01-04 10:50:45" itemprop="dateModified" datetime="2025-01-04T10:50:45+08:00">2025-01-04</time> |
| 227 | + <time title="修改时间:2025-01-06 20:00:15" itemprop="dateModified" datetime="2025-01-06T20:00:15+08:00">2025-01-06</time> |
228 | 228 | </span> |
229 | 229 |
|
230 | 230 |
|
@@ -261,6 +261,20 @@ <h2 id="添加依赖"><a class="markdownIt-Anchor" href="#添加依赖"></a> 添 |
261 | 261 | <li>Eureka模块</li> |
262 | 262 | </ul> |
263 | 263 | <figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><dependencies></span><br><span class="line"> <dependency></span><br><span class="line"> <groupId>org.springframework.cloud</groupId></span><br><span class="line"> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></span><br><span class="line"> </dependency></span><br><span class="line"></dependencies></span><br></pre></td></tr></table></figure> |
| 264 | +<h1 id="hystrix-服务熔断已弃用"><a class="markdownIt-Anchor" href="#hystrix-服务熔断已弃用"></a> Hystrix 服务熔断(已弃用)</h1> |
| 265 | +<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">direction: right</span><br><span class="line">服务1 -> 服务2: 请求</span><br><span class="line">服务2 -> 服务3: 请求</span><br><span class="line">服务3 -> 服务4: 请求</span><br><span class="line">服务4 -> 服务5: 故障 {</span><br><span class="line"> style.stroke: red</span><br><span class="line">}</span><br><span class="line">服务5.style.stroke-dash: 4</span><br><span class="line">服务5.style.stroke: red</span><br></pre></td></tr></table></figure> |
| 266 | +<h2 id="服务降级"><a class="markdownIt-Anchor" href="#服务降级"></a> 服务降级</h2> |
| 267 | +<p>当某个微服务宕机时,可以通过Hystrix返回备选方案。</p> |
| 268 | +<h2 id="服务熔断"><a class="markdownIt-Anchor" href="#服务熔断"></a> 服务熔断</h2> |
| 269 | +<p>当某个微服务过长时间没有响应,开启熔断器,直接不调用微服务的方法,只调用降级的服务。重新等待一段时间后,才继续尝试调用微服务方法,并根据响应情况关闭熔断器。</p> |
| 270 | +<h1 id="openfeign-服务降级"><a class="markdownIt-Anchor" href="#openfeign-服务降级"></a> OpenFeign 服务降级</h1> |
| 271 | +<blockquote> |
| 272 | +<p><a href="../%E4%B8%AD%E9%97%B4%E4%BB%B6/Eureka%E7%AC%94%E8%AE%B0#OpenFeign%20%E6%9B%B4%E6%96%B9%E4%BE%BF%E7%9A%84HTTP%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%B7%E6%B1%82%E5%B7%A5%E5%85%B7">OpenFeign 更方便的HTTP客户端请求工具</a></p> |
| 273 | +</blockquote> |
| 274 | +<p>实现一个<code>FallBackClient</code>类,并继承<code>Client</code></p> |
| 275 | +<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="meta">@Component</span> <span class="comment">// 注意,需要将其注册为Bean,Feign才能自动注入</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">UserFallbackClient</span> <span class="keyword">implements</span> <span class="title class_">UserClient</span>{</span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="keyword">public</span> User <span class="title function_">getUserById</span><span class="params">(<span class="type">int</span> uid)</span> { <span class="comment">// 这里我们自行对其进行实现,并返回我们的替代方案</span></span><br><span class="line"> <span class="type">User</span> <span class="variable">user</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">User</span>();</span><br><span class="line"> user.setName(<span class="string">"我是替代方案"</span>);</span><br><span class="line"> <span class="keyword">return</span> user;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure> |
| 276 | +<p>在<code>Client</code>中指定fallback参数</p> |
| 277 | +<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">// fallback参数指定为我们刚刚编写的实现类</span></span><br><span class="line"><span class="meta">@FeignClient(value = "userservice", fallback = UserFallbackClient.class)</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">UserClient</span> {</span><br><span class="line"></span><br><span class="line"> <span class="meta">@RequestMapping("/user/{uid}")</span></span><br><span class="line"> User <span class="title function_">getUserById</span><span class="params">(<span class="meta">@PathVariable("uid")</span> <span class="type">int</span> uid)</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure> |
264 | 278 | <h1 id="踩坑记录"><a class="markdownIt-Anchor" href="#踩坑记录"></a> 踩坑记录</h1> |
265 | 279 | <h2 id="找不到mapper"><a class="markdownIt-Anchor" href="#找不到mapper"></a> 找不到Mapper</h2> |
266 | 280 | <figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">***************************</span><br><span class="line">APPLICATION FAILED TO START</span><br><span class="line">***************************</span><br><span class="line"></span><br><span class="line">Description:</span><br><span class="line"></span><br><span class="line">Field deviceMapper in com.esagent.es.EsDataInit required a bean of type 'com.example.mapper.YourMapper' that could not be found.</span><br><span class="line"></span><br><span class="line">The injection point has the following annotations:</span><br><span class="line"> - @org.springframework.beans.factory.annotation.Autowired(required=true)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Action:</span><br><span class="line"></span><br><span class="line">Consider defining a bean of type 'com.example.mapper.YourMapper' in your configuration.</span><br></pre></td></tr></table></figure> |
|
0 commit comments