SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】

Fegin 介绍

spring cloud fegin ,他是基于Netflix Fegin实现得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合这两者得功能外,他还提供了了一种声明式得Web服务客户端定义方式。

快速入门

创建一个spring boot项目命名为”eureka-bussniss-service-user-client-fegin”,选择server和fegin的依赖;
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第1张图片

application.yml相关配置:

spring:
  application:
    name: service-user-client-fegin
server:
  port: 9001
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
feign:
  hystrix:
    enabled: true

项目主类EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaBussnissServiceUserClientFeginApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaBussnissServiceUserClientFeginApplication.class, args);
    }
}

我们以eureka-bussniss-service-user的服务例。在fegin项目中定义一个接口”UserFeignClient”

/**
 * 标明feign调用的微服务名称
 */
//通过@ FeignClient(“服务名”),来指定调用哪个服务。
// 比如在代码中调用了service-hi服务的“/hi”接口,还可以使用url参数指定一个URL
// fallback  出现错误回调类
@FeignClient(name = "service-user",fallback = UserFallback.class)
public interface UserFeignClient {

    /**
     * 对应service-user微服务中的URL
     * @return
     */
    @GetMapping("/listUsers")
    String listUsers();

}

接着,创建一个Controller来实现对Fegin客户端的调用,使用@Autowired自动注入上面的“UserFeignClient ”实例。并且通过方法实现对service-user的服务发起调用。

@RestController
public class UserFeignApi {
    /**
     * 将刚才定义的userFeignClient注入,并当成普通的接口调用即可
     */
    @Autowired
    private UserFeignClient userFeignClient;

    @GetMapping("/listUsersByFeign")
    public String ListUsers(){
        String users = this.userFeignClient.listUsers();
        return users;
    }
}

方式测试fegin的负载均衡以及服务容错保护的功能,我们创建了一个UserFallback实现UserFeignClient。实现接口请求错误的反馈

@Component
public class UserFallback implements UserFeignClient {
    @Override
    public String listUsers() {
        return "服务调用失败";
    }
}

包路径截图
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第2张图片
到这里就已经基本完成了,依次启动service-user(8802,8803两个端口)、fegin。
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第3张图片
访问fegin项目的地址http://localhost:9001/listUsersByFeign
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第4张图片
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第5张图片
重复请求,会发现接口数据是依次返回8802和8803的数据的。

现在把其中一个service-user服务停掉(8803),一开始当请求负载到8803这个服务实例时,因为当前的服务已经停掉了,所以接口响应显示了我们实现了UserFallback 类的返回。
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第6张图片

再过几秒钟后,我们继续请i求会发现,接口已经全部负载到了8802的服务实例了。
SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】_第7张图片

所以可以看到fegin已经实现了Ribbon和Hystrix的功能了。

github 项目源码

下一篇我们将实现spring cloud config分布式配置中心的组件。

你可能感兴趣的:(springCloud)