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

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

Fegin 介绍

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

快速入门

创建一个spring boot项目命名为"eureka-bussniss-service-user-client-fegin",选择server和fegin的依赖;


img_ef4a18b17062db1ea70c71bcf2b7278a.png
1532587428278.png

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 "服务调用失败";
    }
}

包路径截图


img_60662937c4427f5d4b82a45e1cf9dc7c.png
1532588267196.png

到这里就已经基本完成了,依次启动service-user(8802,8803两个端口)、fegin。


img_6f0978675ecc9a31710fe14ac6398140.png
1532588691914.png

访问fegin项目的地址http://localhost:9001/listUsersByFeign

img_5359878a512989133e069c3ae77f6f4d.png
1532588711363.png

img_660755d7f996dbb82a99f004fd290e37.png
1532588720488.png

重复请求,会发现接口数据是依次返回8802和8803的数据的。

现在把其中一个service-user服务停掉(8803),一开始当请求负载到8803这个服务实例时,因为当前的服务已经停掉了,所以接口响应显示了我们实现了UserFallback 类的返回。


img_521d30a569b5ce4ea223b006e3abc8ac.png
1532588846177.png

再过几秒钟后,我们继续请求会发现,接口已经全部负载到了8802的服务实例了。


img_363273049bdddb807fa32a142be8f9be.png
1532588992210.png

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

github 项目源码

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

目录
相关文章
|
2月前
|
前端开发 Java 数据库
SpringBoot入门 - 对Hello world进行MVC分层
SpringBoot入门 - 对Hello world进行MVC分层
53 3
SpringBoot入门 - 对Hello world进行MVC分层
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
100 3
SpringBoot入门 - 添加内存数据库H2
|
12天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
36 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
67 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java 应用服务中间件 数据库连接
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
|
2月前
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
30 2
SpringBoot入门 - 定制自己的Banner
|
2月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
64 1
SpringBoot入门(7)- 配置热部署devtools工具
|
2月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
20 1
 SpringBoot入门(3) - 对Hello world进行MVC分层
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
150 5
|
2月前
|
XML 安全 Java
SpringBoot入门 - SpringBoot简介
▶SpringBoot入门 - SpringBoot简介