SpringBoot和SpringCloud的依赖就不提及了,相信你自己都导入了,注意版本对应关系
导包
Feign中本身已经集成了Ribbon依赖和自动配置,所有无需导入Ribbon包
代码语言:javascript复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在启动类上,添加注解,开启Feign功能
代码语言:javascript复制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("服务名")
访问路径也要一样 案例:
代码语言:javascript复制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依赖和自动配置,所有直接在配置文件里配置即可
代码语言:javascript复制ribbon:
ReadTimeout: 2000 # 数据通信超时时长
ConnectTimeout: 500 # 连接超时时长
MaxAutoRetries: 0 # 当前服务器的重试次数
MaxAutoRetriesNextServer: 1 # 重试多少次服务
OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试 如果是false代表只对get请求重试
如果集成了Hystix设置了Hystix的超时时间的话,看一下Hystix的超时时间,将Hystix的超时时间设置大一些