spring微服务之OpenFeign的介绍与使用

1. 不同方法远程调用对比:
1.OpenFeign的定义接口调用方式
@FeignClient("feign-client")
public interface IService 

调用方需要这个接口并添加FeignClient注解,,value值为所需要调用的服务的注册中心名字;并抄写相应的路由规则getMapping及方法等;

 

同时需要添加@EnableFeignClients到调用方的启动类上:

 2. Eureka的远程调用方式:

使用Resttemplate自动注入,Resttemplate.getForObject或者Resttemplate.postForObject方法,传递:服务调用地址、被调用方法返回值类型、传递的参数等;

3.Gateway远程调用方式:

gateway具有网关的作用,也可以默认设置路由,调用:

1.配置文件配置:

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false  #关闭自动路由规则创建
          lower-case-service-id: true    #开启小写规则匹配
      routes:
      - id: feignclient
        uri: lb://FEIGN-CLIENT
        predicates:
        - Path=/yml/**
        filters:
        - StripPrefix=1

 2. 自定义配置项

@Configuration
public class GatewayConfiguration {

    @Autowired
    private TimerFilter timerFilter;

    @Autowired
    private AuthFilter authFilter;

    @Bean
    @Order
    public RouteLocator customizedRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/java/**")
                    .and().method(HttpMethod.GET)
                    .and().header("name")
                    .and().uri("lb://FEIGN-CLIENT")
                )
                .route(r -> r.path("/seckill/**")
                        .and().after(ZonedDateTime.now().plusMinutes(1))
//                        .and().before()
//                        .and().between()
                        .filters(f -> f.stripPrefix(1))
                        .uri("lb://FEIGN-CLIENT")
                )
                .build();

    }

}

2.自动重试:
spring.main.allow-bean-definition-overriding=true
# 每台机器最大重试次数
feign-client.ribbon.MaxAutoRetries=2
# 可以再重试几台机器
feign-client.ribbon.MaxAutoRetriesNextServer=2
# 连接超时
feign-client.ribbon.ConnectTimeout=1000
# 业务处理超时
feign-client.ribbon.ReadTimeout=2000
# 在所有HTTP Method进行重试
feign-client.ribbon.OkToRetryOnAllOperations=true
3.底层原理

在OpenFeign中,动态代理是实现远程服务调用的关键。当我们在客户端调用OpenFeign接口的方法时,实际上是通过动态代理将该方法调用转发到远程服务。

动态代理是在运行时创建的代理对象,它会拦截代理对象的所有方法调用,并将这些调用转发到指定的处理器(handler)进行处理。在OpenFeign中,处理器就是一个HTTP客户端,用于发送HTTP请求并接收响应。

OpenFeign使用了Java动态代理技术,它通过创建一个实现了OpenFeign接口的代理对象来实现远程服务调用。当我们调用代理对象的方法时,代理对象会将方法调用转发到一个处理器中,该处理器会构造HTTP请求,并将请求发送到远程服务。远程服务接收到请求后,会处理该请求并返回一个HTTP响应。处理器接收到响应后,将响应转换成OpenFeign接口方法的返回值,并将该返回值返回给代理对象,代理对象再将返回值返回给调用方。

总的来说,OpenFeign的动态代理实现原理是使用Java动态代理技术,通过创建代理对象拦截OpenFeign接口的方法调用,并将这些调用转发到一个HTTP客户端进行处理,最后将处理结果返回给调用方。
————————————————
版权声明:本文为CSDN博主「冷风扇666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43116031/article/details/129854036

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值