首先引入依赖:
web
eureka client
test
feign的起步依赖:
Spring-cloud-starter-feign

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

配置 application.yml :端口号,程序名,注册地址。

spring:
  application:
    name: eureka-feign-client
server:
  port: 8765
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

程序的启动类加上 @EnableFeignClients 注解开启 Feign Client 功能。
加上开启Eureka Client 功能的注解。

@EnableEurekaClient
@EnableFeignClients

下面实现一个简单的 Feign Client
在新建的接口上加 @FeignClient 注解声明一个 Feign Client 其中 value 为远程调用的其他服务的服务名。
下面还要写一个 FeignClient 的配置类 FeignConfig.class 在 EurekaClientFeign 接口内部有一个 sayHiFromClientEureka() 方法 ,该方法通过Feign 来调用 客户端服务的 API 接口 。

@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {
    @GetMapping(value = "/hi")
    String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}

FeignConfig 类: 在该类上 加注解 @Configuration 注解表明是个配置类,
注入一个 bean 的名字为 feignRetryer 的 Retryer 的 Bean
这样,feign 在远程调用失败后会进行重试。

@Configuration
public class FeignConfig {

    @Bean
    public Retryer feignRetryer(){
        return new Retryer.Default(100,1000,5);
    }
}

在 Server 层 的 类中 注入 EurekaClientFeign 的 Bean 通过他去调用 sayHiFromClientEureka() 方法:

@Service
public class HiService {
    @Autowired
    EurekaClientFeign eurekaClientFeign;
    public String sayHi(String name){
        return eurekaClientFeign.sayHiFromClientEureka(name);
    }
}

在 controller 层 加 @RestController 注解 写一个接口,调用 Server 层的 sayHi 方法。
这样 Hiserver 就可以通过 EurekaClientFeign 远程调用 eureka-client 服务的 API 接口了。

@RestController
public class HiController {
    @Autowired
    HiService hiService;

    @GetMapping("/hi")
    public String sayHi(@RequestParam(defaultValue = "ioenn",required = false) String name){
        return hiService.sayHi(name);
    }

}

启动实例, 然后浏览器访问:
http://localhost:8761
看看服务注册 ,
然后 访问
http://localhost:8765/hi
浏览器会轮流显示,访问 两个服务的 API 打印的结果 。
可以看到 Feign 有负载均衡的能力。
该 Feign 依赖,还引入了 ribbon 和 Hystrix 依赖。