OpenFeign+Hystrix 熔断器

2024-05-31 12:52
文章标签 openfeign hystrix 熔断器

本文主要是介绍OpenFeign+Hystrix 熔断器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenFeign+Hystrix 熔断器

文章目录

    • OpenFeign+Hystrix 熔断器
      • 一,OpenFeign
        • 1.OpenFeign介绍
        • 2.OpenFeign使用
        • 3.OpenFeign 的特性和工作原理。
          • 特性:
          • 工作原理:
      • 二,Hystrix 熔断器
        • 1.介绍
        • 2.和OpenFeign整合使用

一,OpenFeign

1.OpenFeign介绍

OpenFeign是一个基于Java的声明式HTTP客户端,主要用于简化编写基于RESTful服务的客户端代码。它允许开发人员通过接口和注解的方式来定义和描述RESTful服务的调用,从而避免了手动编写大量的HTTP请求和参数处理代码。

主要功能包括:

  1. 声明式RESTful服务调用:通过定义接口和使用注解,开发人员可以方便地描述RESTful服务的调用方式,包括URL、HTTP方法、请求参数等。
  2. 内置负载均衡:OpenFeign集成了负载均衡功能,可以与服务发现组件(如Eureka、Consul等)无缝合作,实现对服务实例的自动负载均衡和故障转移。
  3. 支持多种协议:除了HTTP协议外,OpenFeign还支持其他协议,如Ribbon、Hystrix等,以实现更多的功能,如容错、断路器等。
  4. 易于扩展:OpenFeign提供了丰富的扩展点,可以方便地定制和扩展其功能,满足不同场景下的需求。

总之,OpenFeign的主要功能是简化RESTful服务的客户端调用,提高开发效率,同时提供了负载均衡和扩展性等特性,使得开发人员可以更专注于业务逻辑的实现。

2.OpenFeign使用

当使用OpenFeign时,您需要完成以下步骤:

1.添加依赖:在项目的构建文件(如Maven的pom.xml)中添加OpenFeign的依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在项目启动类添加@EnableFeignClients注解以启用Feign客户端功能。

//@EnableFeignClients注解,您可以告诉Spring Boot应用程序去自动配置和初始化Feign相关的组件,并将其纳入到应用程序的上下文中。这样,您就可以在其他组件或类中通过依赖注入的方式使用Feign客户端接口,并直接调用远程服务。
@SpringBootApplication
@EnableFeignClients
public class MomentApplication {public static void main(String[] args) {SpringApplication.run(MomentApplication.class, args);}
}

3.创建Feign客户端接口:定义一个Java接口,用于描述要调用的远程服务的接口和方法。可以使用注解来指定调用的URL、HTTP方法、请求参数等。

//@FeignClient是一个注解,用于在Spring Cloud中创建和配置一个能够调用其他服务的REST客户端。它是Spring Cloud Netflix项目的一部分,通过使用该注解,我们可以很方便地定义和配置一个HTTP客户端,以便与其他服务进行通信。
//使用@FeignClient注解时,需要指定要调用的目标服务的名称,可以通过value属性或name属性设置。同时,还可以通过url属性指定目标服务的URL地址
//name参数:用于指定远程服务的名称。这个名称可以是服务注册中心(如Eureka、Consul等)中注册的服务名,也可以是Nacos中注册的服务名。在使用服务发现功能时,Feign会根据这个名称去服务注册中心中查找对应的实例地址,从而进行调用。如果不使用服务注册中心,也可以将name参数设为url参数的值,直接指定远程服务的URL。
//url参数:用于指定远程服务的URL。当您知道远程服务的具体URL时,可以直接将URL指定在这里,这样Feign就会直接调用这个URL对应的服务,而不需要通过服务注册中心进行查找。
//因此,name和url参数提供了两种不同的方式来指定要调用的远程服务的位置,一种是通过服务注册中心,另一种是直接指定URL。根据具体情况,您可以选择适合您项目架构的方式来配置这些参数。
@FeignClient(name = "remote-service", url = "http://example.com")
public interface RemoteServiceClient {@RequestMapping(method = RequestMethod.GET, value = "/api/resource")ResponseEntity<String> getResource();@RequestMapping(method = RequestMethod.POST, value = "/api/resource")ResponseEntity<Void> createResource(@RequestBody Resource resource);
}

4.这时候你可以直接在别的地方使用spring的依赖注入 来使用这个类 直接调用类里面的方法

@Autowired
RemoteServiceClient RemoteServiceClient;

5.配置负载均衡:如果您使用了服务发现组件(如Nacos)来管理服务实例,则可以配置OpenFeign进行负载均衡。

spring:application:name: my-applicationcloud:nacos:server-addr: 192.168.80.192:8848

以上是使用OpenFeign的基本步骤,当然还有更多高级特性和配置可以根据具体需求进行定制。希望这些信息能够帮助您更好地了解如何使用OpenFeign。

3.OpenFeign 的特性和工作原理。
特性:
  1. 声明式 API 定义
    • 使用 Java 接口来定义远程服务的 API,通过注解来描述 HTTP 请求的细节,如 URL、HTTP 方法、请求头、请求体等。
    • 这种声明式的方式让开发者可以专注于业务逻辑,而无需关心底层的 HTTP 请求细节。
  2. 集成性
    • OpenFeign 可以轻松地与 Spring Cloud 等微服务框架集成,通过简单的配置即可启用 OpenFeign 客户端。
    • 它与其他微服务组件如 Ribbon、Eureka 等的集成也十分顺畅,可以轻松实现负载均衡、服务发现等功能。
  3. 可扩展性
    • OpenFeign 支持自定义编码器和解码器,允许开发者根据需要定制请求和响应的数据格式。
    • 还支持自定义请求拦截器,可以在发送请求之前或之后执行一些逻辑操作,如添加认证信息、日志记录等。
  4. 负载均衡和容错
    • 通过与 Ribbon 等负载均衡器的集成,OpenFeign 能够实现服务调用的负载均衡和容错,提高系统的可用性和可靠性。
  5. 服务发现
    • OpenFeign 可以与服务发现组件如 Eureka、Consul 等集成,自动获取服务的实例列表并实现动态调用。
    • 这种集成让微服务架构中的服务调用更加灵活和可靠。
  6. 支持异步和同步调用
    • OpenFeign 支持同步和异步两种调用方式,可以根据业务需求选择合适的调用方式。
    • 异步调用可以提高系统的并发能力和性能。
工作原理:
  1. 接口定义
    • 开发者通过 Java 接口定义远程服务的 API,使用注解来描述接口的各种属性,如请求方法、URL、请求参数等。
  2. 动态代理
    • 当应用程序需要调用远程服务时,OpenFeign 会使用动态代理技术生成代理对象,代理对象会根据接口定义动态地生成 HTTP 请求。
  3. 请求发送
    • 代理对象接收到方法调用后,根据接口定义生成对应的 HTTP 请求,并将请求发送到远程服务。
  4. 响应处理
    • 远程服务收到请求后处理并返回响应,代理对象将响应解析并返回给调用方。
  5. 错误处理
    • 如果请求过程中出现错误,OpenFeign 会根据配置的错误处理器对错误进行处理,可以返回默认值或者抛出异常等。

通过以上步骤,OpenFeign 实现了简单、优雅的 HTTP API 客户端,使得在 Java 应用程序中进行远程服务调用变得更加轻松和高效。


二,Hystrix 熔断器

1.介绍

Hystrix是Netflix开源的一款用于分布式系统的延迟和容错库。它旨在阻止在复杂的分布式体系结构中的雪崩效应,从而提高系统的弹性和可靠性。Hystrix通过实现熔断器模式来达到这一目的。

熔断器模式是一种设计模式,用于防止故障在分布式系统中的传播。当系统中的一个服务出现问题时,熔断器会暂时阻止对该服务的调用,而不是继续发起请求并可能导致整个系统崩溃。Hystrix通过监控每个服务的调用情况和响应时间,根据预先设定的阈值来决定是否打开熔断器,以及如何处理后续的请求。

除了熔断器模式,Hystrix还提供了线程隔离、请求缓存、降级机制等功能,使得系统可以更好地应对网络延迟、服务故障和高负载等情况。

2.和OpenFeign整合使用

1.添加依赖

<!-- 熔断依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.启动类上添加 @EnableCircuitBreaker 注解,以启用熔断器功能

/*@EnableCircuitBreaker 是 Spring Framework 中用于启用断路器功能的注解。它的作用是将应用程序标记为使用了断路器模式,可以让 Spring 容器扫描带有 @HystrixCommand 注解的方法,并为其生成代理以实现断路器的功能。
通过使用 @EnableCircuitBreaker 注解,Spring 应用能够利用断路器模式来处理远程服务调用或依赖组件的故障。当被标记的方法发生故障时,断路器可以快速地提供一个备用方案,防止故障在整个系统中蔓延,从而增强了系统的健壮性和可靠性。*/
@SpringBootApplication
@EnableFeignClients//openFeign注解
@EnableCircuitBreaker 
public class MomentApplication {public static void main(String[] args) {SpringApplication.run(MomentApplication.class, args);}
}

3.创建一个 Feign 客户端接口,并使用 @FeignClient 注解来指定远程服务的名称和降级处理类:

​ 加上fallback属性

//value 属性指定了远程服务的名称,fallback 属性指定了降级处理类
//当我们使用通过服务注册中心来查找服务的实例时 可以这样使用
//fallback属性指定了一个降级处理类,当服务调用失败时,Feign将会调用该类中的方法来处理
@FeignClient(value = "server-2112a-user", fallback =UserFeignClientFallback.class)
public interface UserFeignClient {@PostMapping("/user/{id}")String getUserById(Long id);
}

4.创建降级处理类 UserFeignClientFallback,用于定义远程服务调用失败时的降级处理逻辑

@Component
public class UserFeignClientFallback implements UserFeignClient {@Overridepublic String getUserById(Long id) {return "熔断器启动 服务器崩了,已经熔断了~~~~~";}
}

ent
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String getUserById(Long id) {
return “熔断器启动 服务器崩了,已经熔断了~~~~~”;
}
}


通过以上步骤,我们就实现了对远程服务调用的熔断处理。当远程服务不可用时,会执行降级处理逻辑,确保系统的稳定性。

这篇关于OpenFeign+Hystrix 熔断器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017979

相关文章

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

OpenFeign的使用(一)

OpenFeign的定义         OpenFeign是一个声明式的Web服务客户端,它简化了编写Web服务客户端的过程,使得微服务间的通信更加简单和灵活。它主要作用于帮助开发者方便地调用远程服务,让远程调用像本地方法调用一样简单。 事实上,远程调用的关键点就在于四个: 请求方式 请求路径 请求参数 返回值类型         所以,OpenFeign就利用SpringMV

OpenFeign不支持了怎么办?

Feign是Spring Cloud中的一个声明式的HTTP客户端库,用于简化编写基于HTTP的服务调用代码。但是从Spring Cloud 2020版本开始,官方宣布Feign将不再维护和支持,推荐使用OpenFeign作为替代方案。 但是,随着SpringCloud 2022的发布,官方宣布OpenFeign将被视为功能完整。这意味着Spring Cloud团队将不再向模块添加新特性。只会修

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时,需要在发起HTTP请求时添加一些默认的请求头,比如认证令牌(token)。为了实现这一功能,可以创建一个请求拦截器,并且通过@ConfigurationPropert

Spring Cloud的Ribbon-Hystrix-Feign

Ribbon 作为负载均衡,在客户端实现,服务段可以启动两个端口不同但servername一样的服务 Hystrix作为熔断流量控制,在客户端实现,在方法上注解,当请求出错时可以调用注解中的方法返回 Feign 可以定义请求到其他服务的接口,用于微服务间的调用,不用自己再写http请求,在客户端实现,调用此接口就像远程调用其他服务一样,当请求出错时可以调用接口的实现类来返回 一、客户端负载均

springcloud feign 与 openFeign区别

1、Feign与OpenFeign的区别 1)Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用接口,就可以调用服务注册中心的服务。 Feign的依赖 <dependency><groupId>org.springfra

6.远程调用-OpenFeign

文章目录 1.OpenFeign介绍2.OpenFeign开发3.OpenFeign的参数传递4.OpenFeign 的最佳实践4.1继承的方式4.2抽取的方式 5.服务部署6.spring全家桶复习 大家好,我是晓星航。今天为大家带来的是 远程调用-OpenFeign 相关的讲解!😀 1.OpenFeign介绍 因为Feign的停更维护,我们使用的历来是spring-clo

Hystrix熔断降级组件学习

Hystrix熔断降级组件学习 一、Hystrix是什么?二、Hystrix的作用三、Spring Cloud整合Hystrix代码示例3.1. 添加依赖3.2. 启用Hystrix3.3. 定义服务调用 四、熔断器仪表盘4.1. 添加依赖4.2. 启用Hystrix Dashboard4.3. 访问Dashboard(仪表盘) 五、Spring Cloud整合Hystrix原理5.1. 整

优雅实现远程调用-OpenFeign

目录 OpenFeign介绍 OpenFeign最佳实践 我再来遇到个问题,我创建的com.xx.xxx包,放到一起了,不是那种一个在一个下面的那种 Nacos,只要看见这种什么网络报错啥的,java.net.SocketException: Network is unreachable 虽然RestTemple对于HTTP封装后,已经比直接使用HTTPClient简单多

springcloud+Hystrix断路器

springcloud+Hystrix断路器 1.Hystrix简介及相关概念 1.1简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等; Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 1.2相关概念 1.服务雪崩: ​ 一个服务,依赖于另一个功