微服务学习笔记七 Spring Cloud Feign负载均衡及服务熔断

简介: 微服务学习笔记七 Spring Cloud Feign负载均衡及服务熔断

**Feign:**

与Ribbon一样,Feign也是由Netflix提供的,Feign是一个声明式、

模块化的Web Service客户端,它简化了开发者编写Web客户端的操作,

开发者可以通过简单的接口和注解来调用HTTP API ,Spring Cloud Feign,

它整合了Ribbon和Hystrix,具有可插拔、基于注解、负载均衡、服务熔断

等一系列便捷功能。

相比较于Ribbon+RestTemplate的方式,Feign大大简化了代码的开发,

Feign支持多种注解,包括Feign注解、JAX-RS注解、Spring MVC注解等,

Spring Cloud 对Feign进行了优化,整合了Ribbon和Eureka,从而让Feign

的使用更加方便。

Ribbon和Feign的区别:

Ribbon是一个通用的HTTP客户端工具,Feign是基于Ribbon实现的。

Feign的特点:

1)Feign是一个声明式的Web Service客户端。

2)支持Feign注解、SpringMVC注解、JAX-RS注解。

3)Feign基于Ribbon实现,使用起来更加简单。

4)Feign集成了Hystrix,具备服务熔断的功能。

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200713174109858.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)

创建Module,pom.xml添加依赖


```yaml

<dependencies>

   <dependency>

       <groupId>org.springframework.cloud</groupId>

       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

       <version>2.0.2.RELEASE</version>

   </dependency>


   <dependency>

       <groupId>org.springframework.cloud</groupId>

       <artifactId>spring-cloud-starter-openfeign</artifactId>

       <version>2.0.2.RELEASE</version>

   </dependency>

</dependencies>

```

创建配置文件,application.yml


```yaml

server:

 port: 8050

spring:

 application:

   name: feign

eureka:

 client:

   service-url:

     defaultZone: http://localhost:8761/eureka/

 instance:

   prefer-ip-address: true

```

创建启动类


```java

package com.shuang;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.openfeign.EnableFeignClients;


@SpringBootApplication

@EnableFeignClients

public class FeignApplication {

   public static void main(String[] args) {

       SpringApplication.run(FeignApplication.class,args);

   }

}

```

创建声明式接口


```java

package com.shuang.feign;


import com.shuang.entity.Student;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;


import java.util.Collection;


@FeignClient(value = "provider")

public interface FeignProviderClient {

   @GetMapping("/student/findAll")

   public Collection<Student> findAll();


   @GetMapping("/student/index")

   public String index();

}

```

Handler


```java

package com.shuang.controller;


import com.shuang.entity.Student;

import com.shuang.feign.FeignProviderClient;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;


import java.util.Collection;


@RestController

@RequestMapping("/feign")

public class FeignHandler {

   @Autowired

   private FeignProviderClient feignProviderClient;


   @GetMapping("/findAll")

   public Collection<Student> findAll(){

       return feignProviderClient.findAll();

   }


   @GetMapping("/index")

   public String index(){

       return feignProviderClient.index();

   }

}

```

服务熔断,application.yml中添加熔断机制


```java

server:

 port: 8050

spring:

 application:

   name: feign

eureka:

 client:

   service-url:

     defaultZone: http://localhost:8761/eureka/

 instance:

   prefer-ip-address: true

feign:

 hystrix:

   enabled: true

```

feign.hystrix.enable:是否开启熔断器。

创建 FeignProviderClient 接口的实现类FeignError,定义容错处理逻辑,通过@Component

注解将FeignError实例注入IOC容器中。




```java

package com.shuang.feign.impl;


import com.shuang.entity.Student;

import com.shuang.feign.FeignProviderClient;

import org.springframework.stereotype.Component;


import java.util.Collection;


@Component

public class FeignError implements FeignProviderClient {

   @Override

   public Collection<Student> findAll() {

       return null;

   }


   @Override

   public String index() {

       return "服务器维护中。。。。";

   }

}

```

在FeignProviderClient定义处通过@FeignClient的fallback属性设置映射。


```java

package com.shuang.feign;


import com.shuang.entity.Student;

import com.shuang.feign.impl.FeignError;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;


import java.util.Collection;


@FeignClient(value = "provider", fallback = FeignError.class)

public interface FeignProviderClient {

   @GetMapping("/student/findAll")

   public Collection<Student> findAll();


   @GetMapping("/student/index")

   public String index();

}


```


**依次启动:注册中心、Feign**



![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200713174030134.png)

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
11月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
629 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
2174 3
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
377 20
|
负载均衡 前端开发 Java
SpringCloud调用组件Feign
本文深入探讨微服务Spring体系中的Feign组件。Feign是一个声明式Web服务客户端,支持注解、编码器/解码器,与Spring MVC注解兼容,并集成Eureka、负载均衡等功能。文章详细介绍了SpringCloud整合Feign的步骤,包括依赖引入、客户端启用、接口创建及调用示例。同时,还涵盖了Feign的核心配置,如超时设置、拦截器实现(Basic认证与自定义)和日志级别调整。最后,总结了`@FeignClient`常用属性,帮助开发者更好地理解和使用Feign进行微服务间通信。
1251 1
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
1895 8
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
995 6

热门文章

最新文章