4-CloudAlibaba-Sentinel(整合OpenFeign)學習筆記2020.10.24

懵懵懂懂程式設計師發表於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

相關文章