OpenFeign+Hystrix 熔断器

OpenFeign+Hystrix 熔断器

一,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-application
  cloud:
    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 {
    @Override
    public String getUserById(Long id) {
        return "熔断器启动 服务器崩了,已经熔断了~~~~~";
    }
}

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


通过以上步骤,我们就实现了对远程服务调用的熔断处理。当远程服务不可用时,会执行降级处理逻辑,确保系统的稳定性。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值