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客户端进行处理,最后将处理结果返回给调用方。
————————————————
版权声明:本文为优快云博主「冷风扇666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_43116031/article/details/129854036