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分布式配置中心的组件。

目录
相关文章
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
433 37
|
1月前
|
负载均衡 网络协议 Java
浅谈Springboot与Springcloud的区别
浅谈Springboot与Springcloud的区别
39 1
|
3月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
3月前
|
Java
SpringBoot和SpringCloud对应版本
SpringBoot和SpringCloud对应版本
86 0
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
4月前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
4月前
|
监控 NoSQL Java
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
43 0
|
4月前
|
Java API 网络架构
Spring Boot与Spring Cloud Gateway的集成
Spring Boot与Spring Cloud Gateway的集成
|
4月前
|
负载均衡 监控 Java
深入理解Spring Boot与Spring Cloud的整合方式
深入理解Spring Boot与Spring Cloud的整合方式
下一篇
无影云桌面