Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
简单来说,Nacos给我们提供了服务的注册与发现、配置中心、服务总线等,Nacos一个组件相当于Eureka、Config、Bus三个组件
进入 github.com/alibaba/nac… 后选择相应的版本后下载。
这里我采用的是1.3.1的Windows版本
1、打开conf/application.properties文件
将33-41行配置修改为自己的数据库配置
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=root
db.password=root
复制代码
2、导入SQL
将conf/nacos-mysql.sql
的sql导入到上面配置的nacos数据库中
3、启动
配置完成后,进入到bin/startup.cmd,双击运行
出现这个界面,如果没有报错,说明启动成功
我们访问Console的地址
用户名和密码都是:nacos
登陆成功后即可看到下图效果
搭建父工程:spring-cloud
我们需要在父工程中管理所有子项目的依赖版本
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.2.10.RELEASE
2.2.3.RELEASE
2.2.5.RELEASE
2.2.5.RELEASE
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.springframework.cloud
spring-cloud-gateway-dependencies
${spring-cloud-gateway.version}
pom
import
org.springframework.cloud
spring-cloud-openfeign-dependencies
${spring-cloud-openfeign.version}
pom
import
复制代码
搭建provider工程:spring-cloud-alibaba-nacos-discovery-provider
pom.xml 文件加入以下依赖
spring-cloud-alibaba
io.mvvm
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
复制代码
application.yml
spring:
application:
name: spring-cloud-alibaba-nacos-discovery-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8888
复制代码
NacosDiscoveryProviderApplication.java
我们这里使用了 @EnableDiscoveryClient
注解来开启服务注册与发现
package io.mvvm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册与发现
public class NacosDiscoveryProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryProviderApplication.class, args);
}
}
复制代码
启动后,我们查看Nacos中的服务列表
可以看到,我们的服务已经成功的注册进 nacos
中
pom
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-openfeign
复制代码
application.yml
spring:
application:
name: spring-cloud-alibaba-nacos-discovery-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8899
复制代码
NacosDiscoveryConsumerApplication.java
package io.mvvm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册与发现
@EnableFeignClients // 开启OpenFeign
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
}
复制代码
ConsumerClient.java
这里我们调用上面写的服务提供者的echo接口
@FeignClient
中的value填入${spring.application.name}
即可,openfeign底层采用了ribbon做负载均衡
package io.mvvm.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("spring-cloud-alibaba-nacos-discovery-provider")
public interface ConsumerClient {
@GetMapping("/echo/{string}")
String echo(@PathVariable String string);
}
复制代码
ConsumerController.java
package io.mvvm.controller;
import io.mvvm.client.ConsumerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ConsumerController {
@Resource
private ConsumerClient consumerClient;
@GetMapping("/get/{str}")
public String echo(@PathVariable("str") String string){
return consumerClient.echo(string);
}
}
复制代码
测试
访问localhost:8899/get/123
查看打印的数据
在父工程下搭建子工程:spring-cloud-alibaba-nacos-config
pom
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
复制代码
bootstrap.yml
server:
port: 9999
spring:
application:
name: spring-cloud-alibaba-nacos-config
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
# 配置中心文件名称拼接方式
# ${prefix}-${spring.profiles.active}.${file-extension}
复制代码
NacosConfigApplication.java
package io.mvvm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册与发现
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
@RestController
@RefreshScope // 动态刷新配置信息
class ConfigController {
@Value("${config.version}")
private String configVersion;
@RequestMapping("/get")
public String get() {
return configVersion;
}
}
}
复制代码
访问Nacos面板,进入到:配置管理->配置列表->+
其中Data ID
一般为${prefix}-${spring.profiles.active}.${file-extension}
简单理解为:工程名称 + profile + 文件名称
例如上图中所展示:spring-cloud-alibaba-nacos-config-dev.yaml
分为了三部分
第一部分是:spring-cloud-alibaba-nacos-config
为工程名称
第二部分是:dev
即开发环境
第三部分是:yaml
就是配置格式
注意:配置格式一般根据${spring.cloud.nacos.config.file-extension}
决定
注意:后缀的yaml不要简写成yml,刚刚测试出错。
设置完毕后点击发布即可
启动工程
访问url(忽略数据不一样,这是之前测试的图)
这里可以不断的修改nacos中配置的值,然后刷新测试是否可以拿到最新的配置
在Nacos中有一个命名空间和分组的概念。
其中命名空间帮助我们实现了多租户的隔离作用
这里有很多种方案
命名空间以不同的环境进行管理,而分组以项目区分管理,
也可以将命名空间以项目作为管理,分组作为不同环境管理
添加命名空间
添加一个新在命名空间
其中ID一般留空即可,Nacos会使用UUID生成
命名空间名:我这里就以不同环境作为隔离,所以添加一个dev
描述:一些描述,避免一觉醒来忘记了
添加配置文件
首先要选择上方的dev环境,然后点击加号
这里的Group可以自定义,一般大写。
其他参考上面写的配置添加Demo
修改工程配置
namespace
:这里是命名空间的ID,可以在命名空间列表中看到group
:就是刚刚在添加的时候自定义的,填进去就好了server:
port: 9999
spring:
application:
name: spring-cloud-alibaba-nacos-config
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # nacos address
file-extension: yaml
namespace: c686d204-8595-4bcb-acad-fad2693bc5ae
group: SPRINGCLOUDALIBABA_GROUP
复制代码
以上配置表示:在${namespace}
命名空间中找到${group}
分组中的${prefix}-${spring.profiles.active}.${file-extension}
配置文件
测试
启动测试。
源码地址:gitee.com/aumu/spring…
作者:潘潘同学
链接:https://juejin.cn/post/7050702231628152846