Nacos
nacos = naming configuration service
动态服务发现,配置管理服务平台,注册中心和配置中心的组合
Nacos= Eureka + config + Bus
启动Nacos 默认端口 localhost:8848/nacos 默认账号密码 nacos nacos
注意启动时 ⚠️ 默认集群启动 单机启动 -m standalone
新建一个微服务9001
启动类不要忘了加上
@EnableDiscoveryClient
application.yml配置
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册进nacos
management:
endpoints:
web:
exposure:
include: '*' #开启监控端点
Controller
@RestController
@Slf4j
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getServerPort(@PathVariable("id") Integer id
)
{
return "nacos registry "+serverPort+"\t" + id;
}
}
去注册中心发现注册成功
克隆一个9001或者用虚拟端口映射
虚拟端口映射
启动9002后打开注册中心
实例数变为2
Nacos天生支持负载均衡
新建Consumer 83
application.yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要访问的微服务名称(成功注册进nacos的微服务提供者)可写可不写
service-url:
nacos-user-service: http://nacos-payment-provider
因为Nacos自带了Ribbon
@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
Controller
@RestController
@Slf4j
public class OrderNacosController
{
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id)
{
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
启动83
现在测试一下Nacos的轮询负载均衡
http://localhost:83/consumer/payment/nacos/1
Nacos-Config
新建cloudalibaba-config-nacos-client3377
bootstarp.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos作为服务注册中心
config:
server-addr: localhost:8848 # nacos作为配置中心
file-extension: yaml #指定yaml的格式配置
application.yml
spring:
profiles:
active: dev # 开发环境 测试 test 生产 prod
Controller
@RestController
@RefreshScope //支持nacos的动态刷新
public class ConfigClientController
{
@Value("${}config.info")
private String configInfo;
@GetMapping(value = "/config/info")
public String getConfigInfo()
{
return configInfo;
}
}
官方文档
公式
新建配置
命名空间
解决多环境多项目管理
dev开发环境
test测试环境
Prod生产环境
保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件
一个大型分布式微服务 系统会有很多微服务子项目,
每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境….
对这些微服务配置进行管理
DataID方案
指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DatalD
新建dev配置DataID
新建test配置DataID
通过spring.profile.active属性就能进行多环境下配置文件的读取
spring:
profiles:
#active: dev # 开发环境 测试 test 生产 prod
active: test
Group方案
通过Group实现环境区分 新建Group
在nacos图形界面控制台上面新建配置文件DatalD
bootstrap+ application
Namespace方案
新建dev/test的Namespace
回到服务管理-服务列表查看
按照域名配置填写 yml
Nacos集群和持久化配置
VIP可以理解为虚拟ip映射
Nacos默认自带嵌入式数据库derby
Nacos持久化
nacos\conf目录下的sql脚本 nacos-mysql.sql 执行脚本
修改Nacos的application.properties
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=你的root
db.password=你的mysql密码
Nacos集群配置
最少需要1个nginx+3个nacos注册中心+1个mysql
linux 服务器上nacos集群配置 cluster.conf
复制cluster.conf.example
修改cluster 注意只能写hostname
编辑nacos的启动脚本startup.sh 使它能够接受不同的启动端口
配置Nginxs 做负载均衡
⚠️虚拟ip不行的话就用hostname
启动 3333 4444 5555 nacos
访问 nginx的1111端口
服务注册进集群
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
#换成Nginx的端口1111
server-addr: 192.168.XXX.XXX:1111
management:
endpoints:
web:
exposure:
include: '*' #开启监控端点