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底层提供一致性协议算法。
图2-6
2.2.1 下载并启动Nacos Server
进入Nacos的GitHub主页后打开releases页,就会显示所有版本的Nacos信息,如图2-7所示。
图2-7
下面以 Nacos 1.1.4 为例进行说明,下载完成后进行解压,解压后的 Nacos 目录结构如下:
其中:
·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之后,以单机部署的模式进行启动:
启动成功之后,使用浏览器访问http://localhost:8848 (默认端口是8848,可以通过conf/application.properties配置文件修改 server.port配置项改变端口号)。然后使用默认的账号和密码(nacos/nacos)进入控制台(默认情况下,如果要使用Nacos上的生产环境,建议将内置的Derby内存数据库更改成MySQL数据库),如图2-8所示。
图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启动类:
上述代码中:
① 配合@SpringBoot注解启动一个Spring Boot应用。
②使用@RestController定义一个EchoController。
③/echo是EchoController对外暴露的访问路径。
④/echo返回"echo:#{name参数}"。
application.properties配置文件如下:
启动NacosProvider后在应用控制台可以发现nacos-provider服务成功注册到Nacos的日志:
在Nacos控制台上也看到了服务注册成功的提示,如图2-9所示。
图2-9
2.2.3 启动Nacos Discovery Consumer进行服务发现
同样,在 Java 工程脚手架上选择 Nacos Service Discovery 和 Spring Web 模块,创建spring-cloud-alibaba-nacos-consumer项目。
新建NacosConsumer启动类:
上述代码中:
① 这是一个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配置文件如下:
启动NacosConsumer后访问http://ip:port/8081/info,返回内容如下:
访问http://ip:port/8081/hello后,返回内容如下: