引入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 idcmscms-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依赖。
        <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