引入Nacos
安装Nacos
下载地址:下载地址
版本关系说明:版本关系说明
启动
- Linux/Unix/Mac 启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
- 如果您使用的是ubuntu系统,或者运行脚本报错提示
[[符号找不到,可尝试如下运行
:
bash startup.sh -m standalone
- Windows 启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
关闭服务器
-
Linux/Unix/Mac
sh shutdown.sh
-
Windows
shutdown.cmd
或者双击shutdown.cmd运行文件。
访问控制台
默认的控制台为:http://188.188.188.11:8848/nacos/index.html
修改配置
默认启动nacos 使用的是内存数据库,nacos支持数据保存到mysql,需要做如下配置修改。
- 使用
conf/nacos-mysql.sql
文件在mysql数据库初始化nacos的数据表 - 修改
conf/application.properties
增加mysql 的链接配置
修改前的配置
### If use MySQL as datasource:
# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### 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.0=nacos
# db.password.0=nacos
修改后的配置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### 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.0=nacos
db.password.0=nacos
Nacos Spring Boot
改造Spring Boot项目为Spring Cloud 项目
pom.xml
引入Spring Cloud 相关的依赖
<properties>
<spring-boot.version>2.4.1</spring-boot.version>
<spring.cloud.version>2020.0.2</spring.cloud.version>
</properties>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--引入Spring Cloud bootstrap配置自动加载相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
注:Spring Cloud 2020.0 之后由于适配的Spring Boot版本是2.4,在Spring Boot2.4 对配置文件加载的规则有变化,因此Spring Clound Alibaba 官网的文档和demo直接升级版本是不能正常运行的,原因是不会自动加载
bootstrap.properties
配置文件。需要引入spring-cloud-starter-bootstrap
这个包来完成自动加载bootstrap.properties
。
- 在项目的
application.properties
同级目录下新增bootstrap.properties
配置文件
配置管理的改造
-
1、 添加依赖 在Spring Boot项目中,引入
spring-cloud-starter-alibaba-nacos-config
依赖。版本关系为:Spring Boot 2.4.x
:Spring Cloud 2020.0.x
:Spring Cloud alibaba 2021.1
详细版本依赖关系参考:版本说明 -
pom.xml
引入相关的依赖
...
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
...
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
...
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 2、在
bootstrap.properties
中配置 Nacos 配置:
#配置nacos config的服务器地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#nacos certification information
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
## nacos-namespace cannot user 'public',cause by 'public' has special handing inside.
#spring.cloud.nacos.config.namespace=public
# 配置自定义的dataid名称,如果没有指定,则默认使用应用名称
spring.cloud.nacos.config.name=cms
# 配置配置文件后缀,默认为properties
#spring.cloud.nacos.config.file-extension=yaml
#是否自动刷新配置
spring.cloud.nacos.config.refresh-enabled=true
- 3、配置多环境的配置
# 当前应用环境,默认为dev
spring.profiles.active=${application_environment:dev}
-
4、在Nacos Server中增加
data id
为cms
和cms-dev.properties
的配置,将需要由Nacos管理的配置移动到相关的配置中。 -
5、启动应用后的效果
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.1)
[2021-05-20 15:16:10.602] [restartedMain] INFO : [c.a.n.c.c.i.LocalConfigInfoProcessor:212] - LOCAL_SNAPSHOT_PATH:C:\Users\admin\nacos\config
[2021-05-20 15:16:10.743] [restartedMain] INFO : [c.a.n.c.c.u.JvmUtil:49] - isMultiInstance:false
[2021-05-20 15:16:10.761] [restartedMain] WARN : [c.a.c.n.c.NacosPropertySourceBuilder:87] - Ignore the empty nacos configuration and get it based on dataId[cms.properties] & group[DEFAULT_GROUP]
[2021-05-20 15:16:10.768] [restartedMain] INFO : [o.s.c.b.c.PropertySourceBootstrapConfiguration:109] - Located property source: [BootstrapPropertySource {name='bootstrapProperties-cms-dev.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-cms.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-cms,DEFAULT_GROUP'}]
[2021-05-20 15:16:10.816] [restartedMain] INFO : [c.c.JavaCmsApplication:664] - The following profiles are active: dev
[2021-05-20 15:16:19.366] [restartedMain] INFO : [c.c.JavaCmsApplication:61] - Started JavaCmsApplication in 10.525 seconds (JVM running for 12.481)
[2021-05-20 15:16:19.377] [restartedMain] INFO : [c.a.n.c.c.i.ClientWorker:239] - [fixed-127.0.0.1_8848] [subscribe] cms-dev.properties+DEFAULT_GROUP
[2021-05-20 15:16:19.379] [restartedMain] INFO : [c.a.n.c.c.i.CacheData:93] - [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=cms-dev.properties, group=DEFAULT_GROUP, cnt=1
[2021-05-20 15:16:19.379] [restartedMain] INFO : [c.a.n.c.c.i.ClientWorker:239] - [fixed-127.0.0.1_8848] [subscribe] cms.properties+DEFAULT_GROUP
[2021-05-20 15:16:19.380] [restartedMain] INFO : [c.a.n.c.c.i.CacheData:93] - [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=cms.properties, group=DEFAULT_GROUP, cnt=1
[2021-05-20 15:16:19.380] [restartedMain] INFO : [c.a.n.c.c.i.ClientWorker:239] - [fixed-127.0.0.1_8848] [subscribe] cms+DEFAULT_GROUP
[2021-05-20 15:16:19.380] [restartedMain] INFO : [c.a.n.c.c.i.CacheData:93] - [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=cms, group=DEFAULT_GROUP, cnt=1
服务注册和发现的改造
- 1、 添加依赖
在Spring Boot项目中,引入spring-cloud-starter-alibaba-nacos-discovery
依赖。版本关系为:
Spring Boot 2.4.x
: Spring Cloud 2020.0.x
: Spring Cloud alibaba 2021.1
详细版本依赖关系参考:版本说明
...
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 2、在
bootstrap.properties
中配置 Nacos 配置:
# 配置Nacos discovery服务器地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- 3、服务生产者的配置
在Spring boot应用启动类,增加@EnableDiscoveryClient
注解
- 4、服务消费者的配置
- 在Spring boot应用启动类,增加
@EnableDiscoveryClient
注解 - 增加
spring-cloud-starter-loadbalancer
依赖。
- 在Spring boot应用启动类,增加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 5、使用
@Configuration
public class ConsumerConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping(value = "/echo/{str}")
public String echo(@PathVariable String str) {
//使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问
ServiceInstance serviceInstance = loadBalancerClient.choose("java-cms");
String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),str);
System.out.println("request url:"+url);
return restTemplate.getForObject(url,String.class);
}
}
spring.cloud.nacos.discovery.namespace
配置的是命名空间的id,不是名称。
应用监控点的开启
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 增加配置
# 相关的endpoint
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
##代表启用单独的url地址来监控 Spring Boot 应用,为了安全一般都启用独立的端口来访问后端的监控信息
#management.endpoints.web.base-path=/monitor
## 配置监控的端口
#management.server.port=10080
##启用HTTPS
#management.server.ssl.enabled=true
#management.server.ssl.key-store-type=PKCS12
#management.server.ssl.key-store=classpath:ssl/xxx.pfx
#management.server.ssl.key-store-password=xxxxxxx
##允许访问的IP地址
#management.server.address=127.0.0.1
##启用接口关闭 Spring Boot
management.endpoint.shutdown.enabled=true