深入理解Spring Cloud与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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后,返回内容如下: