服务注册与发现:Nacos Discovery
目录
一、概述
二、Nacos discovery——服务的注册与发现
1. 版本关系
2. 下载安装
(1)下载
(2)启动
(3)浏览器访问
三、Nacos服务注册与发现实战
1. 构建Spring Cloud Alibaba工程
(1)创建父工程
(2)创建子项目
2. 编写测试Controller
3. 服务注册与发现的配置
4. 验证负载均衡配置
一、概述
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
特性:
(1)服务发现与服务健康检测
(2)动态配置服务
(3)动态 DNS 服务
(4)服务及其元数据管理
二、Nacos discovery——服务的注册与发现
Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端,并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host,port,健康检查URL,主页等-注册到 Nacos 。
1. 版本关系
关于Spring Cloud Alibaba与Spring boot, Spring Cloud Alibaba 与其他微服务组件之间的版本对应关系:Home · alibaba/spring-cloud-alibaba Wiki · GitHub
这里截取部分对应关系,我使用的 Spring Cloud Alibaba 版本为 2.2.9.RELEASE。
2. 下载安装
(1)下载
Nacos 下载地址:Releases · alibaba/nacos (github.com)
这里我下载的Windows版本:
(2)启动
将压缩包放至文件夹解压即可,运行bin目录下startup.cmd脚本即可启动:
注意:这里启动的是单机模式,默认是集群模式。
(3)浏览器访问
默认用户名和密码都是 nacos
三、Nacos服务注册与发现实战
说明:这里先构建一个父工程,父工程下分别有两个微服务模块,一个是订单模块,一个是库存模块,订单要调用库存模块的接口,下面演示如何调用,以及使用Nacos进行服务的注册与发现。
1. 构建Spring Cloud Alibaba工程
(1)创建父工程
(2)创建子项目
创建订单服务模块:
创建库存服务模块:
搭建父子关系:
更改父工程 pom.xml 的打包方式,并引入子模块:
<packaging>pom</packaging>
<modules>
<module>order-nacos</module>
<module>stock-nacos</module>
</modules>
在子模块中指定父模块:
<parent>
<groupId>com.example</groupId>
<artifactId>nacos-learn-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
2. 编写测试Controller
在order启动类中引入RestTemplate,用于微服务之间的接口调用
@SpringBootApplication
public class OrderNacosApplication {
public static void main(String[] args) {
SpringApplication.run(OrderNacosApplication.class, args);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
return restTemplate;
}
}
在订单的微服务模块下创建 OrderController:
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add() {
System.out.println("下单成功!");
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
return "下订单了!" + msg;
}
}
在库存的微服务模块下创建 StockController:
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("/reduct")
public String reduct() {
System.out.println("扣减库存");
return "库存-1,调用的库存服务的端口号为:" + port;
}
}
3. 服务注册与发现的配置
订单模块Application.yml 配置:
server:
port: 8020 #订单服务启动的端口
spring:
application:
name: order-service #nacos会将该名称当作服务名称
cloud:
nacos:
server-addr: 127.0.0.1:8848 #nacos服务地址
discovery:
username: nacos #登录到nacos管理平台的用户名
password: nacos #登录到nacos管理平台的密码
namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例
库存模块Applicaion.yml 配置:
server:
port: 8021 #库存服务启动的端口号
spring:
application:
name: stock-service #nacos会将该名称当作服务名称
cloud:
nacos:
server-addr: 127.0.0.1:8848 #nacos服务地址
discovery:
username: nacos #登录到nacos管理平台的用户名
password: nacos #登录到nacos管理平台的密码
namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例
启动两个服务:
访问浏览器测试调用接口是否成功:
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
return restTemplate;
}
查看Nacos 管理面板:
可以看到两个服务以及注册到nacos。
补充:关于 Nacos Starter 更多的配置项信息
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. 验证负载均衡配置
Nacos 默认使用的是 Ribbon 提供的负载均衡机制,Ribbon 属于客户端的负载均衡,默认使用的方式是轮询。
(1)在RestTemplate配置上加 @LoadBalanced注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
return restTemplate;
}
(2)在StockController 的/reduct接口被调用时,返回该服务的端口号
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("/reduct")
public String reduct() {
System.out.println("扣减库存");
return "库存-1,调用的库存服务的端口号为:" + port;
}
}
(3)启动两个库存服务,右键点击 Copy Configuration 选项,选择启动的端口号为8022:
就是库存服务要在多个端口启动时,这样来操作
可以看到在Nacos服务列表中,stock-service多了一个实例:
验证负载均衡: