Feignを使用してサービスコールを完了します

Mavenの依存関係を追加する

<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>

Feignを構成する

# 配置Feign
feign:
  client:
    config:
      # 服务提供者的服务名
      nacos-school-server:
        # 设置日志级别
        loggerLevel: FULL

        # 设置契约配置:支持Feign原生注解
        # contract: feign.Contract.Default

        # 设置请求超时时间,超时会抛出异常,单位毫秒,默认值2s
        # readTimeout: 5000

        # 设置连接超时时间,超时会抛出异常,单位毫秒,默认值5s
        # connectTimeout: 10000

        # 配置自定义请求拦截器
        requestInterceptors:
          - com.tigerkin.feign.CustomRequestIntercoptor

Feignインターフェースを追加

/**
 * @ClassName SchoolServiceFeign
 * @Description
 * 		value: 服务器提供者的应用程序名
 * 		path: 可以配置统一前缀路径
 * 		fallback: 异常回调
 * @Author tigerkin
 * @Date 2022/3/3 14:14
 */
@Component
@FeignClient(value = "nacos-school-server", path = "/school", fallback = SchoolServiceFallback.class)
public interface SchoolServiceFeign {

    // Feign原生注解:@RequestLine("GET /get") 请求映射注解,不指定GET POST等请求方法就会抛出异常
    // Feign原生注解:@Param() 参数注解
    @GetMapping("/get")
    String get();
}

Feignコールバックを追加

偽のコールバックは、リボンまたはセンチネルヒューズのダウングレードを統合する必要があります。統合しないと、有効になりません。リボンはメンテナンスされなくなったため、Sentinelはここに統合されています。

  • 依存関係を追加する
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 構成を追加する
feign:
  # 集成Sentinel后,需要设置为true
  sentinel:
    enabled: true
  • コールバックは統合後に有効になります
/**
 * @ClassName SchoolServiceFallback
 * @Description 异常回调需要实现Feign接口
 * @Author tigerkin
 * @Date 2022/3/3 14:15
 */
@Component
public class SchoolServiceFallback implements SchoolServiceFeign {

    @Override
    public String get() {
        return "获取学校请求调用失败";
    }
}

サービスコール

サービス呼び出しは、メソッドの呼び出しと同じように、比較的単純です。依存性注入Feignインターフェース、そしてメソッドを呼び出すだけです。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    SchoolServiceFeign schoolServiceFeign;

    @GetMapping("/getSchool")
    public String getSchool() {
        return String.format("[Feign] %s", schoolServiceFeign.get());
    }
}

おすすめ

転載: blog.csdn.net/weixin_42270645/article/details/123459082