4-CloudAlibaba-Sentinel(整合OpenFeign)学习笔记2020.10.24

4-CloudAlibaba-Sentinel(整合OpenFeign)学习笔记2020.10.24

前言: (Cloud官网GitHub官网)

Sentinel与OpenFeign组件兼容。要使用它,除了引入sentinel-starter依赖关系之外,还需要完成以下两个步骤:

  • 在属性文件中启用伪装的Sentinel支持。 feign.sentinel.enabled=true
  • 添加openfeign starter依赖项以触发并启用sentinel starter

1.0 引入spring-cloud-starter-openfeign依赖

在原有学习Sentinel工程模块下增加openfeign依赖

		<!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

1.1.1 配置文件application.yml 添加, 打开 Sentinel 对 Feign 的支持

server:
  port: 8080

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: 119.xx.xxx.xxx:8848 # Nacos服务注册中心地址
    sentinel:
      transport:
      	port: 8719
        dashboard:  119.xx.xxx.xxx:8090 # 配置Sentinel dashboard地址
   
# 暴露监控
management:
  endpoints:
    web:
      exposure:
        include: '*'
        
# 打开Sentinel对Feign的支持
feign:
  sentinel:
    enabled: true 

1.1.2 在启动类加上@EnableFeignClients注解,开启Feign的功能

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class SentinelService
{
    public static void main(String[] args) {
        SpringApplication.run(SentinelService.class, args);
    }
}

1.1.3 简单的用法FeignClient

//注解要指定服务名 _不能有下划线
@FeignClient(value = "nacos-provider",fallback = FeginClientImpl.class) 
public interface FeginClient {

    //nacos-provider服务中名字为"/getPort/nacos/{id}"的接口
    @GetMapping(value = "/getPort/nacos/{id}")
    String getPort(@PathVariable("id") Integer id);
}

//-------------------------------分割线---------------------------------------------
/**
 * @Author: ZhiHao
 * @Date: 2020/10/23 17:50
 * @Description: 降级方法实现
 * @Versions 1.0
 **/
@Component //别忘记注册入框架管理
public class FeginClientImpl implements FeginClient {
    @Override
    public String getPort(Integer id) {
        return "调用失败了!!!!!!!!!"+id;
    }
}

调用之前学习nacos的提供者接口。

1.1.4 增加api接口进行启动测试

	@Autowired
    private FeginClient feginClient;

    @GetMapping("/testFeginClient")
    public CommonResult testFeginClient() {
        String feginClientPort = feginClient.getPort(666);
        return new CommonResult(HttpStatus.HTTP_OK, "正常响应", feginClientPort);
    }

PS: 如果启动遇到了 如下异常Caused by: java.lang.AbstractMethodError: com.alibaba.cloud.sentinel.feign.SentinelContractHolder.parseAndValidatateMetadata(Ljava/lang/Class;)Ljava/util/List;

那是因为fegin.context接口的定义为parseAndValidateMetadata。就是之前版本中定义的方法名拼写错误。

解决方法: 看这里

1.1.5 测试结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6wRjoTLI-1603506775253)(https://s1.ax1x.com/2020/10/23/BESNZT.jpg)]

1

©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页