上一篇文章《微服务实战spring cloud tencent系列(十三)Spring Cloud Tencent 服务熔断降级介绍》里面我们大致的介绍了一些Spring coud tencent的服务熔断降级,这篇文章我们来实战一下。在微服务里面关于远程调用我们使用最多的就是OpenFeign的方式,所以这里我们演示下使用Feign调用的服务熔断。
一、准备productservice
这里我们还是继续使用shop-server这个演示项目,在前面我们添加了一个user-service的module模块,这里为了方便展示调用,我们创建一个product-service的项目,并且在这里编写一个controller,代码示例如下:
package org.product.service.controller; import org.product.service.model.BaseResponse; import org.product.service.model.ProductModel; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ProductController { @RequestMapping("/product") public BaseResponse product() { ProductModel model = new ProductModel(); model.setId(1); model.setName("汉堡包"); model.setStock(10); BaseResponse response = new BaseResponse(); response.setSuccess(true); response.setCode(200); response.setMessage("请求成功"); response.setData(model); return response; } }
整product-service的代码示例如下:
二、在user-service里面添加熔断降级依赖
这里我们的逻辑是:user-service项目中编写一个接口,进行远程调用product-service里面的接口,那么这里的熔断逻辑就是user-service调用product-service的时候,product-service服务挂了,那么就需要再user-service里面进行服务降级,因此这里我们首先需要在user-service里面添加spring cloud tencent的熔断降级依赖,依赖信息如下:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-starter-tencent-polaris-circuitbreaker</artifactId> </dependency>
三、编写feignclient
然后我们在这里编写一个feignclient的接口,进行调用product服务,代码示例如下:
package org.user.service.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Primary; import org.springframework.web.bind.annotation.GetMapping; import org.user.service.model.BaseResponse; @Primary @FeignClient(name = "product-service",fallback = ProductClientFallback.class) public interface ProductClient { @GetMapping("/product") public BaseResponse product(); }
这里的话,我们需要定义一个降级的类,方便触发熔断的时候,直接使用这个降级的类来处理对应的结果。这里的ProductClientFallback类代码示例如下:
package org.user.service.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Primary; import org.springframework.web.bind.annotation.GetMapping; import org.user.service.model.BaseResponse; @Primary @FeignClient(name = "product-service",fallback = ProductClientFallback.class) public interface ProductClient { @GetMapping("/product") public BaseResponse product(); }
四、开启user-service的服务熔断降级
在spring cloud tencent微服务框架中,开启服务熔断降级的方式是在bootstrap.yml配置文件中配置如下的信息:
完整的配置文件信息如下:
spring: application: name: user-service cloud: polaris: address: grpc://192.168.31.218:8091 namespace: shop config: address: grpc://192.168.31.218:8093 # 选填,只有在配置中心和注册中心是两个不同的地址时才需要配置 auto-refresh: true # 选填,当配置发布后,动态刷新 Spring 上下文,默认值为 true ratelimit: rejectHttpCode: 200 #自定义拒绝请求响应的 Http 状态码 rejectRequestTips: "{\"errorCode\":501,\"errorMg\":\"当前服务请求繁忙,请稍候重试\",\"data\":null}" #自定义拒绝请求响应的文本内容 loadbalancer: enabled: true circuitbreaker: enabled: true feign: circuitbreaker: enabled: true logging: level: root: info com.tencent.cloud: debug
以上我们就完成了使用spring cloud tencent模块进行熔断降级的代码编写。
五、创建熔断规则
然后我们回到北极星的dashboard页面上,选择服务级熔断,然后创建一个规则:
整个规则的话,我们尽量从简,从服务角度上来控制对应的熔断降级,然后里面的配置仅提供一个简单的配置供参考,大家在实际中可以每个配置都尝试下。
配置完成后,点击提交即可。
六、测试项目
这里我们把user-service和product-service给启动起来,然后访问下:http://192.168.31.147:8081/test,此时我们所有的服务都是正常的,因此访问之后返回的结果示例如下:
hello zhangsan 获取到的产品库存是:{"id":1,"name":"汉堡包","stock":10}
效果如下图:
然后我们把product-service停掉,模拟product服务挂掉的场景,然后咱们再访问下上面的test接口:
如上图:可以看到这里服务走了降级的服务,也就是我们定义的fallback类:
以上就是我们使用spring cloud tencent微服务框架实现的服务熔断降级的案例,最后附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...