![深入理解Spring Cloud与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/869/41202869/b_41202869.jpg)
2.2 使用Alibaba Nacos体验第一个Spring Cloud微服务应用
Nacos是阿里巴巴集团在2018年7月开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台,其在2019年4月发布了1.0.0 GA版本,可大规模投入生产环境使用。随着Spring Cloud Alibaba融入Spring Cloud生态,在Spring Cloud的注册中心选型上可以使用Nacos作为注册中心。
Nacos的架构如图2-6所示。其中,Provider应用注册服务到Nacos注册中心,Consumer从Nacos注册中心订阅服务。Nacos提供的Nacos Console可以完成各种运维操作。核心模块Nacos Server由以下4部分组成:
·Open API暴露各种操作,客户端可以调用Open API完成各项事宜。
·Config Service和Naming Service分别对应配置功能及服务注册/发现功能。
·Nacos Core是整个Nacos Server的核心,上层的Config Service和Naming Service底层都依赖Nacos Core。
·Nacos Core底层提供一致性协议算法。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_50_1.jpg?sign=1738819710-h3pQb9Rw247zgVMxIty5a8wt5thHUkC8-0-f53a93b6bd703954e16435ed73d84424)
图2-6
2.2.1 下载并启动Nacos Server
进入Nacos的GitHub主页后打开releases页,就会显示所有版本的Nacos信息,如图2-7所示。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_50_2.jpg?sign=1738819710-ezSdQFHsjoCVC7AZygXsWSU0hJNLnBc9-0-2e52e93f89ad6e885eb31496392dfd44)
图2-7
下面以 Nacos 1.1.4 为例进行说明,下载完成后进行解压,解压后的 Nacos 目录结构如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_50_3.jpg?sign=1738819710-8798AKXityp5j2l6zlcgz8OM3GfNmr1s-0-377801be3d2ac920663ca7add137ad39)
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_51_1.jpg?sign=1738819710-r2UXCInRy3A9PXocInadMkoneBrSBtwm-0-d43648e9c47f336c430b15ad5349d556)
其中:
·LICENSE表示开源协议,Nacos使用的是Apache-2.0协议。
·NOTICE表示注意点,包含 Nacos开发团队所使用的开源协议、使用了第三方的一些类库等信息。
·bin目录中是一些可执行文件,比如,startup.sh/shutdown.sh表示UNIX系统下的启动/关闭脚本,startup.cmd/shutdown.cmd表示Windows系统下的启动/关闭脚本。
·conf目录存放配置文件,包含Nacos日志级别、数据库相关配置、集群等相关配置、启动端口等。
·target目录存放Nacos生成的一些可执行文件,比如nacos-server.jar。startup.sh文件内部就会执行nacos-server.jar。
下载完Nacos之后,以单机部署的模式进行启动:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_51_2.jpg?sign=1738819710-db5TJArAVLl2tPg5X7xB7uUhrM8ARNPi-0-f9f367650191a637b41574cac1fe213d)
启动成功之后,使用浏览器访问http://localhost:8848 (默认端口是8848,可以通过conf/application.properties配置文件修改 server.port配置项改变端口号)。然后使用默认的账号和密码(nacos/nacos)进入控制台(默认情况下,如果要使用Nacos上的生产环境,建议将内置的Derby内存数据库更改成MySQL数据库),如图2-8所示。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_51_3.jpg?sign=1738819710-Hxih81rJqSA8uewdNxL3EOaUzf00OJCn-0-50404badf1bbf66041619d23769d29de)
图2-8
2.2.2 启动Nacos Discovery Provider进行服务注册
在 Java 工程脚手架上选择 Nacos Service Discovery 和 Spring Web 模块,并创建 spring-cloud-alibaba-nacos-provider项目。
提示:Java 工程脚手架是适合中国开发者的 Spring Initializr 代码框架生成器,自带Demo Code,省去搜索引擎检索等复杂动作;有完善的工具链、免费的 IDEA插件,方便直接在IDE中生成,更适合国内用户的网络环境。
新建NacosProvider启动类:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_52_1.jpg?sign=1738819710-SMqhWCwWeoKp3FBMYFvWQhuB5k6Z4lR4-0-d1b313909dcafe563f83701eb9a64e67)
上述代码中:
① 配合@SpringBoot注解启动一个Spring Boot应用。
②使用@RestController定义一个EchoController。
③/echo是EchoController对外暴露的访问路径。
④/echo返回"echo:#{name参数}"。
application.properties配置文件如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_53_1.jpg?sign=1738819710-BvWtZCKncSo3k46DgIPNKJ19qoLXxG58-0-e157b5f8716f97b26b048e95acbc8d9f)
启动NacosProvider后在应用控制台可以发现nacos-provider服务成功注册到Nacos的日志:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_53_2.jpg?sign=1738819710-AkZ8L5QAcVcVuOswQldOEDyqzv4o4XtV-0-61e921afded333ec13875d851f1ffcf8)
在Nacos控制台上也看到了服务注册成功的提示,如图2-9所示。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_53_3.jpg?sign=1738819710-5UL7ethz602FdGyqKZKo8utMu9YuTl8x-0-69e28bbb972028913a15755a3facb549)
图2-9
2.2.3 启动Nacos Discovery Consumer进行服务发现
同样,在 Java 工程脚手架上选择 Nacos Service Discovery 和 Spring Web 模块,创建spring-cloud-alibaba-nacos-consumer项目。
新建NacosConsumer启动类:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_53_4.jpg?sign=1738819710-kM6wVTiyt0rR66Cp4bsaROz2wOMbFEUW-0-8a98e27ca55b4df03e0796043f7cc14e)
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_54_1.jpg?sign=1738819710-tn19RBNp0Dx0LuOnQWnVHN3OCLeAokiF-0-b4b416de3228cd9d784c7aee5d93189f)
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_55_1.jpg?sign=1738819710-xJLU7xAcZYQ8bekjqWJINeciEFbK2fni-0-0b4f14dbf8a28fc206717a3b2c997d11)
上述代码中:
① 这是一个Consumer应用,设置不自动注册到注册中心。
②构造一个RestTemplate,后续用于访问HTTP服务。
③在HelloController中自动注入DiscoveryClient,这是Spring Cloud Commons模块提供的一个服务发现接口,Spring Cloud Alibaba Nacos Discovery模块内部会初始化一个它的实现类—NacosDiscoveryClient,用于后续的服务发现操作。
④在HelloController中注入前面构造的RestTemplate。
⑤使用DiscoveryClient获取my-provider服务对应的所有实例。
⑥使用lambda遍历获取的所有实例,去获取各个实例里的host和port信息。
⑦ 从所有的服务实例列表中任意获取一个,如果没有服务实例,则抛出 IllegalStateException异常。
⑧使用RestTemplate调用服务实例对应的节点信息中的/echo方法。
application.properties配置文件如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_55_2.jpg?sign=1738819710-4fnAa6g6YlqXKgnHj6V7f0ZwvKK8gXV8-0-0fc7a662246ec0a44d02c2c8e3367909)
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_56_1.jpg?sign=1738819710-7S6DgPCdyEJEYI7oHfROkvWwQwOFuQOZ-0-548782224eb706a778729a6ba335857e)
启动NacosConsumer后访问http://ip:port/8081/info,返回内容如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_56_2.jpg?sign=1738819710-tJXB5ZJwpvQlqCLTqMPzxi6UjJkatlr0-0-0b75a031fe0763c43d7580ce891bde39)
访问http://ip:port/8081/hello后,返回内容如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_56_3.jpg?sign=1738819710-DDYqlDEjhZvb3rsQYCZzM5TAUVGDOBnh-0-859b53c3b6b5a7d83fb77878adf51fa1)