提示:学习笔记 欢迎指点
前言
Nacos是Alibaba微服务生态组件中的重要组件之一,主要用它实现应用的动态服务发现、配置管理、服务管理。官方文档
Nacos是可以代替SpringCloud Eureka和SpringCloud Config的开源组件,有了它就不用自己配置和搭建服务端了,服务端直接下载最新发布版本,在服务机器上启动即可。
Nacos安装模式有多种:
一、Nacos安装
可以直接参考官网安装 。采用Docker-Compose安装Nacos要更方便,所以可以学习一下Docker-Compose。
Nacos安装模式有多种:
单机模式 Derby:
这种模式是极简模式,数据没法持久化存储,适合开发环境。
单机模式 MySQL:(支持MySQL5.7和MySQL8.0,我们这里学习MySQL5.7安装模式,因为当前主流还是MySQL5.7)
这种模式支持数据持久化,数据会存储到MySQL中,适合生产环境。
集群模式:
这种模式适合生产环境并且服务节点个数较多,不存在单点故障问题。
Docker 安装Nacos
我们也可以直接采用Docker的方式安装Nacos,这样安装不要克隆项目也不需要修改配置文件,会更方便,安装命令如下:
docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.200.129 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--restart=always \
--name nacos nacos/nacos-server
注意:需要提取准备好msyql数据库
访问 http://192.168.200.200:8848/nacos 效果如下:
二、Nacos服务注册与发现
服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于 服务的动态扩缩容。Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host,port,健康检查URL,主页等-注册到 Nacos 。
我们创建一个springcloud父工程,只包含web依赖。然后基于该父工程,分别创建服务提供者Provider和消费者Consumer工程。
版本适配,wiki 版本说明
SpringBoot我们修改成2.3.12.RELEASE版本,SpringCloud版本改成Spring Cloud Hoxton.SR12版本。cloud alibaba的版本选择2.2.7.RELEASE 。
1.服务提供者Provider
添加依赖如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
配置文件如下:
server:
port: 8091
spring:
application:
name: nacos-provider
cloud:
nacos:
server-addr: localhost:8848
然后创建一个controller来模拟Provider对外提供服务:
@RestController
public class HelloController {
@GetMapping("/getHello")
public String getHello(){
return "hello from nacos provider!";
}
}
最后,在启动类上添加启动注解。
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryProviderApplication.class, args);
}
}
到此,服务提供者就创建好了,在localhost:8091端口等待被调用提供服务。
2.服务消费者Consumer
需要的依赖如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.0.3</version>
</dependency>
配置文件如下:
server:
port: 8092
spring:
application:
name: nacos-consumer
cloud:
nacos:
server-addr: localhost:8848
接下来也创建一个Controller类,对外提供调用的接口,然后在Controller中通过OpenFeign转发调用请求给到Provider。
@RestController
public class HelloController {
@Autowired
private FeignService feignService;
@GetMapping("/getHello")
public String getHello(){
return feignService.getHello();
}
}
@FeignClient("nacos-provider")
public interface FeignService {
@GetMapping("/getHello")
String getHello();
}
如上Service表示需要请求注册中心中服务名称为nacos-provider的/getHello接口。
最后,我们需要在启动类上加上启动注解。
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryConsumerApplication.class, args);
}
}
到此,消费者Consumer也创建好了,在localhost:8092提供调用服务。访问Consumer的/getHello接口,获得的返回内容为:
hello from nacos provider!
此时登录nacos服务端,服务管理,也能看到刚刚注册上来的消费者和服务提供者。
三、Nacos作为配置中心
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
// TODO 未完!!!