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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务学习笔记七 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)

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6天前
|
存储 SpringCloudAlibaba Java
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
20 2
|
6天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
18 0
|
6天前
|
JSON SpringCloudAlibaba Java
【微服务 SpringCloudAlibaba】实用篇 · Feign服务远程调用
【微服务 SpringCloudAlibaba】实用篇 · Feign服务远程调用
21 0
|
6天前
|
JavaScript 前端开发 网络协议
KOI 微服务提供者接收请求,提供服务并传回给 Orchestra
KOI 微服务提供者接收请求,提供服务并传回给 Orchestra
6 0
|
6天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
8月前
|
Dubbo Java 应用服务中间件
深入了解Spring Cloud Alibaba Dubbo
在现代分布式系统开发中,构建高性能、可伸缩性和弹性的微服务架构变得越来越重要。Spring Cloud Alibaba Dubbo(简称Dubbo)是一个开源的分布式服务框架,可以帮助开发者构建强大的微服务架构,具备负载均衡、服务治理、远程调用等强大功能。本文将深入介绍Spring Cloud Alibaba Dubbo,帮助你理解它的核心概念、工作原理以及如何在你的项目中使用它。
|
6月前
|
Kubernetes Java 微服务
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
93 0
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
|
6天前
|
Java 中间件 开发者
Spring Cloud Alibaba
【1月更文挑战第27天】【1月更文挑战第127篇】Spring Cloud Alibaba
83 1
|
9月前
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
431 0
|
6天前
|
消息中间件 Java Maven
Spring Cloud Alibaba 简介
Spring Cloud Alibaba 简介
199 1