目录
Spring Cloud Alibaba专栏目录(点击进入…)
Spring Cloud Alibaba Nacos(服务注册与发现)
Spring Cloud Alibaba Nacos(服务注册与发现)
Spring Cloud Alibaba依赖管理
spring-cloud-alibaba-dependencies包含了它所使用的所有依赖的版本
如果使用Maven,将BOM添加到pom.xml中的<dependencyManagement>部分。这将允许省略任何Maven依赖项的版本,而是将版本控制委派给BOM
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.1.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
项目的版本号格式为x.x.x的形式,其中x的数值类型为数字,从0开始取值,且不限于0~9这个范围。项目处于孵化器阶段时,第一位版本号固定使用0,即版本号为0.x.x的格式
由于Spring Boot 1和Spring Boot 2在Actuator模块的接口和注解有很大的变更,且spring-cloud-commons从1.x.x版本升级到2.0.0版本也有较大的变更,因此采取跟Spring Boot版本号一致的版本:
1.5.x版本适用于Spring Boot 1.5.x
2.0.x版本适用于Spring Boot 2.0.x
2.1.x版本适用于Spring Boot 2.1.x
2.2.x版本适用于Spring Boot 2.2.x
Spring Cloud Alibaba Nacos Discovery:服务注册/发现
Nacos是一个Alibaba开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
使用Spring Cloud Alibaba Nacos Discovery,可基于Spring Cloud的编程模型快速接入Nacos服务注册功能
服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。Nacos Discovery可以将服务自动注册到Nacos服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery也将服务实例自身的一些元数据信息
例如:host、port、健康检查URL,主页等内容注册到Nacos
Nacos Discovery适配了Netflix Ribbon,可以使用RestTemplate或OpenFeign进行服务的调用
Nacos官网:https://nacos.io/zh-cn/docs/quick-start.html
(1)注册中心(Nacos Server)
1.下载nacos-server安装包并压解
文件 | 描述 |
---|---|
bin | 启动/关闭脚本 |
conf | Nacos的配置文件 |
data | 未做持久化的时候数据会存储在此,比如配置数据(第一次运行后才会生成) |
logs | Nacos日志(第一次运行后才会生成) |
target | nacos-server.jar运行文件 |
Nacos参数配置
打开安装目录下conf/application.properties文件,对Nacos进行配置
#配置网页端访问端口
server.port=8848
#配置数据持久化的数据库,这里使用mysql
#这里的配置默认是注释掉的,需要手动去除注释
#如果需要启用数据库的话,需要导入 conf/nacos-mysql.sql 脚本
#如果不启用数据库,则数据将持久化到本地 data/ 目录下
#If use MySQL as datasource:
spring.datasource.platform=mysql
#Count of DB:
db.num=1
#数据库可以有多个,db.url.0=xxx db.url.1=xxx db.url.2=xxx
#此处仅使用一个
#Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=username
db.password=password
#打开认证授权系统,默认为 false
#此项配置并不会影响网页端的登录,设置为 true 或是 false 网页端访问时均需要登录
#此项配置开启的话,在代码中需要配置 nacos 的用户名及密码
#即 spring.cloud.nacos.username 和 spring.cloud.nacos.password 两个参数,对应的是网页端登录的用户名密码
#If turn on auth system:
nacos.core.auth.enabled=true
#其他配置根据自己的需求配置即可
注意:
(1)如需启用数据库,需要导入conf/nacos-mysql.sql脚本
(2)如需开启认证授权,需要在项目代码中配置用户名密码,否则会访问失败
(3)数据库的版本要在5.7以上,否则会出现异常
2.启动、关闭Naocs服务器
启动脚本在bin/目录下,windows下使用 shutdown.cmd与startup.cmd两个脚本
nacos 1.3.2的脚本有个小改动,默认启动模式为cluster集群模式,所以要单机启动的话,有两种方案
方式①:启动命令(standalone代表着单机模式运行,非集群模式)
切换到Nacos安装目录的bin目录下运行下面命令
Linux/Unix/Mac
sh startup.sh -m standalone
sh shutdown.sh
如果使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
startup.cmd -m standalone
shutdown.cmd
方式②:双击startup/sutdown.cmd
单机运行(非集群)
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
1.安装数据库,版本要求:5.6.5+
2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码
(1)带参数运行
创建脚本文件startup-standalone.cmd,添加以下代码到文件中
startup.cmd -m standalone
然后双击启动startup-standalone.cmd脚本即可。或者每次启动时使用startup.cmd -m standalone命令启动
(2)修改原有的脚本
使用编辑器打开脚本文件bin/startup.cmd,找到大概27行,按照下方代码编辑
#原本的代码(集群)
set MODE="cluster"
#修改后的代码(单机)
set MODE="standalone"
修改后保存,然后直接运行bin/startup.cmd脚本即可
(2)配置服务提供者(Provider)
服务提供者可以通过Nacos的服务注册发现功能将其服务注册到Nacos server上
1.引入Nacos Discovery依赖进行服务注册/发现
要在项目中使用Nacos来实现服务注册/发现,使用group ID为com.alibaba.cloud和artifact ID为 spring-cloud-starter-alibaba-nacos-discovery的starter
通过Nacos Server和spring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在application.properties中配置Nacos server(注册中心)的地址
server.port=8070
spring.application.name=service-provider
#注册服务到注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.开启服务注册发现:@EnableDiscoveryClient
通过Spring Cloud原生注解@EnableDiscoveryClient开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
(3)配置服务消费者(Consumer)
配置服务消费者,从而服务消费者可以通过Nacos的服务注册发现功能从Nacos server上获取到它要调用的服务
1.引入Nacos Discovery依赖进行服务注册/发现
要在项目中使用Nacos来实现服务注册/发现,使用group ID为com.alibaba.cloud和artifact ID为 spring-cloud-starter-alibaba-nacos-discovery的starter
通过Nacos Server和spring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在application.properties中配置Nacos server的地址
server.port=8080
spring.application.name=service-consumer
#注册服务到注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.开启服务注册发现功能、@LoadBalanced与Ribbon的集成
通过Spring Cloud原生注解@EnableDiscoveryClient开启服务注册发现功能。给RestTemplate实例添加@LoadBalanced 注解,开启@LoadBalanced与Ribbon的集成
注意:通过带有负载均衡的RestTemplate和FeignClient也是可以访问的
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
(4)测试服务调用
启动ProviderApplication和ConsumerApplication。
调用:http://localhost:8080/echo/2023,返回内容为 Hello Nacos Discovery 2023