开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:Nacos 实现服务调用】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11863
Nacos 实现服务调用
内容介绍:
一、 Nacos 实战准备
二、 商品微服务注册
三、 订单微服务注册
一、Nacos 实战准备
Nacos 实战入门,我们需要在现有的环境中加入 nacos ,并将两个微服务注册上去。
接下来我们通过一张图片来描述所需要操作的内容
一共分为三个部分:
1、第一件事 在服务治理者处安装一个 nacos-server 端,其本质上就是一个软件,我们只需要从官网上下载并且进行安装启动即可。
2、第二件事 我们需要在订单微服务和商品微服务的位置安装 nacos-client 端,其本质上是一个帐包,我们只需要导入三观的依赖,然后进行一些简单的配置即可。
3、第三个步骤我们需要在订单微服务模块通过 nacos-server 拿到商品微服务的地址和端口,最后进行调用。
接下来先完成 nacos-server 的安装,在安装之前我们需要去下载它,
下载地址:https://github.com/alibaba/nacos/releases ,在浏览器打开,可以看到最新的一个版本是1.1.4版本的,在下方提供了不同平台的安装格式,对应自己的平台下载即可,在提供的素材里面也有准备好了一个 nacos-server-1.1.4.zip ,将其复制到我们的工作空间中,然后将其解压就可拿到一个 nacos 的目录,点击进入有两个目录需要我们注意,第一个是 conf ,里面是配置文件,本次全部采用默认不再改动。
接下来是 bin ,需要关注的有两个,一个是 startup.cmd ,另一个是 startdown.cmd ,前者用于启动,后者用于停止。
我们可以通过双击启动也可以通过执行命令启动,执行命令的代码:
#命令启动
Startup.cmd-m standalone
这里我们通过双击启动,在启动过程中我们会发现它默认接听在了8848端口上,等待启动完毕,默认地会给我们一个 ui 界面,我们可以通过此界面查看注册到本 nacos-server 上的服务列表。
二、商品微服务注册
1、 nscos-server 的安装
新建一个标签页,输入网址 localhost:8848/nacos/ 回车,进入到一个登录界面,用户名和密码默认都为 nacos ,点击登录就进入了目的页面,如果有微服务注册上来,我们就可以在服务列表项查看到相关信息。若成功进入登录页面,则说明我们的 nscos-server 就安装完毕了。
2、 nacos-client 的安装
第二个操作是在两个微服务上安装 nacos-client 端。
(1)、在pom.xml 中添加 nacos 的依赖
(2)、在主类上添加 @EnableDiscoveryClient 注解
(3)、在 application.yml 中添加 nacos 服务的地址
由此我们的 Client 端即可访问 servers 端了
之后启动微服务,观察 nacos 的服务面板中是否有注册上来的商品微服务
进入实操:
1、首先我们打开 product 的 pom.xml ,在</dependency> 下方位置输入 nacos 客户端,回车继续输入 </dependency>回车,在 <artifactid> 后
输入 nacos-discivery 回车得到
<groupid>com.alibaba.cloud</groupid> 即可
2、下一步点击 ProductApplication ,
在 @SpringBootApplication 项下方添加一个开启 nacos-client 端的注解,即 EnableDiscoveryClient
3、来到配置文件中添加 nacos-server 的地址,
点击spring.cloud.nacos.discovery.server-adder ,输入 localhost:8848 到此三步全部做完,
最后来启动 ProductApplication 的微服务,若启动过程中没有报错,那么我们即可来到 nacos 的服务端的 ui 界面上,在服务列表上点击刷新,显示的server-product 即为商品微服务注册到服务端上来了。
这个服务名其实就是配置文件里面的 spring:
Application:
Name:service-product
第一个商品微服务就注册完毕了
三、订单微服务注册
1、操作重复
接下来我们把订单微服务也注册到 nacos-server 上来,同样的步骤,第一步加依赖,第二步开注解,第三步加配置,接下来选择 OrderApplication 进行启动,然后来到 ui 界面刷新,可以看到订单微服务也注册到了 nacos-server 上,到这里为止我们的第二个任务也完成了,两个微服务都已经注册到了 nacos-server 上。
接下来我们处理从订单微服务端口通过 nacos-cerver 来获取商品微服务的地址。
在订单微服务中我们打开调用代码,选择 OrderController
Product product =
RestTemplate.getForobject(url:”http://localhost:8081/product/” +pid, Product.class);
以上即为订单微服务调用商品微服务的代码,为保证代码的完整性,将以下部分复制放到下方,然后将其注释掉。
2、代码修改
接下来将 //问题:
//1 一旦服务提供者的地址信息变化了,我们就不得不去修改服务调用者的 java 代码
//2 一旦无法提供者做了集群服务,调用者一方无法实现负载均衡的去调用
//3 一旦微服务变得越来越多,如何来管理这个服务清单就成了问题
删掉,此时商品微服务的地址和端口是写死的,我们需要将其改成从 nacos-server 中进行获取,要想从 nacos-server 中拿去相应的地址和端口,我们在提供的位置输入 Autowired
回车 private DiscoveryClient discoveryclient;由此我们即可通过实例获取相关的信息了。
我们有一个方法为 getInstances 是获取实例的意思,返回值是一个集合,参数是 serverId 也就是服务名,因为我们以后可能会做 server-product 的集群,此服务名下的实例可能会有多个,我们以后会介绍。
输入
discoveryClient.getInstances (serviceld:”
service-product”).
var 会得到一个集合,本次我们直接输入
instances.get(0), 这样我们就取到了商品微服务。
3、地址和端口的获取
要想获取商品微服务的地址和端口,在 instances 中,get.host() 用于取地址, get.Port() 用于取端口,将商品微服务代码中的 localhost 改为 instances.getHost (),
8081改为 instances.getPort (),
这样代码就调整完毕了,下一步点击 OrderApplication 启动微服务,并将断点打到39和44处的位置,回车执行观察效果,启动完毕以后对1号商品执行一个下单操作,可以发现默认已经发出来了,继续执行一次下单,
回车刷新就可以看到请求已经发出,然后点击 instances 观察得到的实例,可以看到一个集合,集合里面的每一个元素都是 NacosServiceInstance 即为 nacos 服务的实例,点开可以发现实例的各种信息,有 ID,端口号,服务地址等等。
其中 host=“192.168.109.1” 和 port=8081是比较重要的,将他们拼起来即为一个微服务的路径,
接下来点击下一步 instances 就拿到了。然后对 “http://” + instance.getHost() +“:”+ instance.getPort() +”/product/” +pid , 执行一次并运行发现没有任何问题,这时我们将断点去掉,把代码放过去,回到执行网址观察发现此访问已经成功,到这里我们的第三个步骤全部完成。
我们通过订单微服务代码的形式,从 nscos-server 端口处拉取到了商品微服务的地址和端口,达到了预期的目的。