概述:sentinel 结合 feign 的使用方式与feign单独使用非常类似。其他需要配置的主要为在配置文件中配置feign激活sentinel。其他使用方式基本一致。sentinel 整合feign无法区分降级与异常处理逻辑,都公用一个fallback降级处理方式。

项目使用文件:

  1. 父工程pom.xml
  2. 子模块pom.xml
  3. 配置文件
  4. 启动类
  5. feignClient类
  6. feignClient失败处理类
  7. controller

一、父工程pom.xml (pom.xml)

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaohui.springCloud</groupId><artifactId>SpringCloud</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><modules><module>product_service</module><module>order_service</module><module>cloud-api-common</module><module>eureka_server</module><module>eureka_server2</module><module>cloud-import-test</module><module>consul_product_service</module><module>consul_order_service</module><module>openfeign_order_service</module><module>hystrix_order_service_ipconn</module><module>hystrix_order_service_rest</module><module>hystrix-turbine</module><module>sentinel_order_service_rest</module><module>sentinel_order_service_feign</module></modules><!-- 统一jar包管理 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>5.1.47</mysql.version><druid.version>1.1.16</druid.version><mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version></properties><!-- 子模块继承之后,提供作用:锁定版本+子模块不用写groupId和version --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR1</version><type>pom</type><scope>import</scope></dependency><!-- springcloud alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency></dependencies></dependencyManagement><build><plugins><!-- maven 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build>
</project>

二、子模块pom.xml(SpringCloud\sentinel_order_service_feign\pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>com.xiaohui.springCloud</groupId><artifactId>SpringCloud</artifactId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>sentinel_order_service_feign</artifactId><dependencies><dependency><groupId>com.xiaohui.springCloud</groupId><artifactId>cloud-api-common</artifactId><version>${project.version}</version></dependency><!-- springCloud 整合的openFeign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Eureka 客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency><!-- web依赖开始 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- web依赖结束 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 引入 alibaba sentinel 断路器--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies></project>

三、子工程配置文件

server:port: 9001spring:application:name: openfeign-order-servicecloud:sentinel:transport:dashboard: 127.0.0.1:8080eager: true #立即加载接口eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://eureka1.com:9000/eureka/instance:prefer-ip-address: true #使用ip进行注册instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务IDlease-renewal-interval-in-seconds: 5 #发送心跳间隔时间 秒lease-expiration-duration-in-seconds: 10 # 服务续约时间 10秒内没有发送心跳(宕机)#Feign 日志输出配置
feign:client:config:CLOUD-PAYMENT-SERVICE:loggerLevel: FULLconnectTimeout: 5000readTimeout: 5000sentinel:enabled: true #feign激活sentinel
logging:level:com.xiaohui.springcloud.service.ProductFeignClient: debug

四、启动类(src/main/java/com/xiaohui/springcloud/SFOrderApplication.java)

package com.xiaohui.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableFeignClients
public class SFOrderApplication {public static void main(String[] args) {SpringApplication.run(SFOrderApplication.class,args);}
}

五、feignClient类(src/main/java/com/xiaohui/springcloud/service/ProductFeignClient.java)

package com.xiaohui.springcloud.service;import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.service.fallback.ProductFeignClientFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@FeignClient(name="CLOUD-PAYMENT-SERVICE",fallback = ProductFeignClientFallBack.class)
public interface ProductFeignClient {@RequestMapping(value="/payment/get/{id}",method = RequestMethod.GET)CommonResult getPayment(@PathVariable("id") Long id);@GetMapping("/payment/get/timeout")CommonResult getPaymentTimeout();
}

六、feignClient失败处理类(src/main/java/com/xiaohui/springcloud/service/fallback/ProductFeignClientFallBack.java)

package com.xiaohui.springcloud.service.fallback;import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.service.ProductFeignClient;
import org.springframework.stereotype.Component;@Component
public class ProductFeignClientFallBack implements ProductFeignClient {@Overridepublic CommonResult getPayment(Long id) {return new CommonResult(500, "OpenFeign--容错---处理",null );}@Overridepublic CommonResult getPaymentTimeout() {return null;}
}

七、controller(src/main/java/com/xiaohui/springcloud/controller/OrderController.java)

package com.xiaohui.springcloud.controller;import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.entities.Payment;
import com.xiaohui.springcloud.service.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
public class OrderController {@Resourceprivate ProductFeignClient productFeignClient;@GetMapping("/consumer/payment/get/{id}")public CommonResult<Payment> getPayment(@PathVariable("id") Long id){return productFeignClient.getPayment(id);}@GetMapping("/consumer/payment/get/timeout")public CommonResult getPaymentTimeout(){return productFeignClient.getPaymentTimeout();}
}

SpringCloud Sentinel 结合OpenFeign的使用介绍相关推荐

  1. SpringCloud Sentinel 熔断降级、热点参数限流、与系统自适应限流介绍与配置

    一.熔断降级介绍与配置 概述:除了上一章节讲解的sentinel的流量控制之外,sentinel还提供了熔断降级功能.与处理高并发的系统自我保护机制不同的是,熔断降级主要防止当前接口不可用时,导致依赖 ...

  2. SpringCloud Sentinel 使用restTemplate的两种配置介绍

    @SentinelResource 主要属性介绍 value:自定义的资源名称.不设置默认为当前类全名.方法名. blockHandler:降级的处理方法名,默认在当前类中匹配.如果指定了blockH ...

  3. 阿里开源Sentinel流控框架基本介绍与简单使用

    作者:未完成交响曲,资深Java工程师!目前在某一线互联网公司任职,架构师社区合伙人! 一.简介 1. Sentinel 是什么? Sentinel是去年7月由阿里中间件团队开源的,面向分布式服务架构 ...

  4. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用

    官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...

  5. SpringCloud Zuul(一)之介绍

    一.zuul官方简介 (1)什么是zuul Zuul是从设备和网站到Netflix流媒体应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul旨在实现动态路由,监视,弹性和安全性.它还可以根据需 ...

  6. springCloud sentinel 流量卫兵

    什么是sentinel 0.说明 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_ ...

  7. (三)SpringCloud实战之openfeign服务调用

    feign是依赖注册中心调用的其他服务. 如果A服务调用B服务,A就是在注册中心找B服务,找到了才知道地址,才能调用接口.(也可以不用注册中心访问到B服务,需要在@feignclient的注解后面配置 ...

  8. SpringCloud Alibaba(五)Nacos raft协议介绍

    前一章,我们了解了当Nacos客户端注册的节点为临时节点时,服务端的一致性协议使用的Distro协议,那么当我们的客户端注册节点为非临时节点的时候,他用的一致性协议是raft协议,下面,我们就来介绍一 ...

  9. SpringCloud链路追踪SkyWalking-第一章-介绍

    目录 参考 简介 链路追踪框架对比 cat zipkin pinpoint skywalking 性能对比 参考 SpringCloud组件链路追踪SkyWalking教学视频,微服务入门到实战教程 ...

最新文章

  1. android 中system 如何打包编译生成的
  2. BZOJ 3720: Gty的妹子树 [树上size分块]
  3. 求android 中串口的发送接收数据代码
  4. python 正交矩阵_协方差矩阵的计算、PCA
  5. linux java heap space_Linux tomcat9 java.lang.OutOfMemoryError: Java heap space 解决方法
  6. Duplicate entry 'xxx' for key 'xxx'
  7. FHQ Treap摘要
  8. RestEasy传值方式
  9. 饱暖思淫欲之美女图片的Python爬虫实例(一)
  10. AD7124-4调试经验分享
  11. 手机“入殓师”,你之前有听过吗?
  12. 自走棋手游服务器稳定,2020最火的自走棋手游
  13. nofollow的使用以及作用
  14. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现
  15. asp.net nancy_如何在ASP.Net Core中使用Nancy
  16. CAPICAPICOM的一些知识[转]
  17. 提高Lua代码运行效率
  18. 小程序转App最便捷的方法,附实操
  19. openssl之C++实现私(公)钥生成、转换
  20. lua 实现类似日历效果

热门文章

  1. 转载 - Linux 磁盘挂载
  2. Zookeeper单机安装(开启kerberos)
  3. oracle 列 连续,sql 查寻某列连续的几个值是否相同
  4. python安装库的方法linalg_Python linalg.gmres方法代码示例
  5. 初识贪心——调度问题
  6. mybatisplus逆向工程生成代码
  7. Linux文本复制到记事本文本文件乱码,解决“在windows里的记事本里编辑的汉字文本文件,上传到linux服务器上出现乱码“问题...
  8. php制作的ios端 跳转url,ThinkPHP 简易开发思路 MVC和URL跳转
  9. hashmultimap java_【Java 学习笔记】 HashMultimap(guava)
  10. 7.2. cvs login | logout