前文: 实现的是最简单的远程调用,不涉及数据库和业务逻辑,(让你有手就会调)在使用远程调用之前,我们先来了解一下这里远程调用其涉及到的组件的原理!
nacos的原理
nacos称之为注册中心,注册中心主要涉及到三大角色
- 服务提供者
- 服务消费者
- 注册中心
它们的关系如下:
- 各个微服务在启动时,将自己的网络地址等信息注册到注册中心,由注册中心来存储这些数据。
- 服务消费者从注册中心中查询服务提供者的地址,并通过地址调用服务提供者的接口。
- 各个微服务与注册中心使用一定的机制通信,比如说心跳;如果注册中心与微服务长时间无法通信,则会注销掉该实例。
- 微服务网络地址发生变化时,例如实例增加或者IP变动等;会重新注册到注册中心中,这样服务消费者就无需人工修改服务提供者的网络地址了。
注册中心的功能
- 服务注册表:服务注册表是注册中心的核心,它用来记录各个微服务的信息,例如微服务的名称,IP,端口等。
- 服务注册与发现:服务注册表是指微服务启动时,将自己的信息注册到注册中心的过程;服务发现是指查询可用的微服务列表以及网络地址的机制。
- 服务检查:注册中心使用一定的机制定时检查已注册的服务,如果发现某实例长时间无法访问,就会从服务注册表中移除该实例。
注:Spring Cloud 提供了多种注册中心的支持,例如:Eureka、Consul、ZooKeeper、Nacos;
OpenFeign的原理
OpenFeing远程调用的核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换为HTTP的请求形式,然后HTTP请求的相应结果解码成JAVA Bean返回给调用者。
- 首先,你对某个接口中定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理。
- 接着你是要调用那个接口,本质上是会调用Feign创建的动态代理,这是核心。
- Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态的构建出你要请求的服务的地址。
- 最后根据这个地址发起请求,解析,响应。
这就是我对以上两个微服务组件的原理的理解,废话不多说,直接操作起来!
步骤1(新建项目)
新建maven项目,我这里是example,里面包含3个子项目,这三个子项目都是Spring Boot项目,他们之间没有关系,都是独立运行的一个模块。如下图
步骤2(导入需要使用到的jar包)
每个模块导入需要使用的jar包
nacos需要导入的jar包
producer需要导入的jar包
consumer需要导入的jar包
步骤3(配置文件配置信息)
配置文件分为3种:yml、properties、bootstrap 我这里使用的是properties配置文件
配置信息都很简单,如下图
nacos的配置
consumer的配置
producer的配置
步骤4(编写对应模块的代码)
nacos这个模块简单,不需要编写任何代码,只要配置文件配置好就行
producer这个模块的代码如下图
consumer模块的代码如下图
在consumer这个模块添加一个service层接口代码如下图
在consumer这个模块添加Controller层
最后分别启动各个模块,可以在nacos注册中心看到我们的服务都已经注册了上来
步骤5(测试消费者调用生产者的接口)
到这里的话,恭喜你已经完成了远程调用,奖励加班一天