zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Feign的快速使用

2023-02-18 16:35:52 时间

SpringBoot和SpringCloud的依赖就不提及了,相信你自己都导入了,注意版本对应关系

导包

Feign中本身已经集成了Ribbon依赖和自动配置,所有无需导入Ribbon包

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

在启动类上,添加注解,开启Feign功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient //开启注册中心客户端,Eureka、zookeeper等都可以
@EnableHystrix //开启Hystrix
@EnableFeignClients //开启Feign
public class UserConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class,args);
    }
}

在创建一个包名为:client 创建一个接口

创建一个包名为:client 创建一个接口,里面的方法要和被调用的Controller中的方法完全一样,并在接口上添加 @FeignClient("服务名")

访问路径也要一样 案例:

import com.leyou.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("user-service")//声明连接的是哪一个服务
public interface UserClient {
    //这里的方法要和调用服务的Controller一样,包括访问地址
    @GetMapping("/user/{id}")
    public User findById(@PathVariable("id") Long id);

}

在Controller层,注入Feign接口即可使用

Feign集成了Ribbon

刚开始就说了,Feign本身已经集成了Ribbon依赖和自动配置,所有直接在配置文件里配置即可

ribbon:
  ReadTimeout: 2000 # 数据通信超时时长
  ConnectTimeout: 500 # 连接超时时长  
  MaxAutoRetries: 0 # 当前服务器的重试次数
  MaxAutoRetriesNextServer: 1 # 重试多少次服务
  OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试 如果是false代表只对get请求重试

如果集成了Hystix设置了Hystix的超时时间的话,看一下Hystix的超时时间,将Hystix的超时时间设置大一些