服务注册与发现流程?
服务注册与发现流程包括三个角色:服务注册中心、服务提供者、服务调用者。
三者的分工如下:
注册中心:提供服务注册接口,接收服务注册请求,保存服务实例的信息。我们项目用的Nacos。
服务提供者:服务接口提供方,请求注册中心将服务信息注册到注册中心。
服务调用者:远程调用的客户端,请求注册中心查询服务地址,通过负载均衡选取目标服务地址进行远程调用。
服务注册与发现流程如下:
- 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
- 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
- 调用者作为客户端自己通过负载均衡算法挑选一个服务提供者实例进行远程调用,即客户端负载均衡
- 调用者向该实例发起远程调用
微服务是怎么实现远程调用的?
首先使用Nacos实现服务注册中心,服务提供方将自己注册到服务注册中心,服务调用方通过客户端负载均衡器从服务注册中心选取一个目标服务地址进行远程调用。
客户端负载均衡器早期用的Ribbon,现在使用的是Spring Cloud Loadbalancer。
具体使用的有两种方式:
- 一种是通过@LoadBalanced注解标识RestTemplate,使用RestTemplate进行远程调用。
- 另一种是使用OpenFeign进行远程调用。
我们项目主要用的是OpenFeign。
OpenFeign的工作原理?
OpenFeign是一个微服务之间调用的Http客户端,它集成了负载均衡组件自动将请求发到不同的服务实例,它是一个http通信模板,底层使用第三方框架OkHttp发送http请求并获取响应结果, 整个请求的过程实现了RPC远程方法调用,将请求和响应自动封装为Java 对象。
它的使用流程:
- 接口定义:开发者通过定义Java接口来描述服务间的通信协议,包括URL、请求方法、请求参数等。
- 代理生成:在应用启动时,Feign接口会生成代理对象。
- 请求发送:当调用代理对象的方法时,Feign会根据方法的注解和参数生成HTTP请求,并发送给目标服务。Feign的底层使用的是第三方的OkHttp框架发起http请求。
- 负载均衡:OpenFeign集成了负载均衡组件(如Ribbon或Spring Cloud Loadbalancer),可以自动将请求发到不同的服务实例。
- 响应处理:目标服务处理完请求后,将响应返回给Feign客户端。
- 结果解析:OpenFeign会根据接口定义和注解,将HTTP响应解析为Java对象,并返回给调用者。