Nacos Ncos-Config Nacos集群和持久化配置

Nacos

nacos = naming configuration service

动态服务发现,配置管理服务平台,注册中心和配置中心的组合
Nacos= Eureka + config + Bus

启动Nacos 默认端口 localhost:8848/nacos 默认账号密码 nacos nacos

注意启动时 ⚠️ 默认集群启动 单机启动 -m standalone


Naocs

新建一个微服务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;
    }
}

去注册中心发现注册成功

Nacos

克隆一个9001或者用虚拟端口映射

虚拟端口映射

虚拟端口映射

启动9002后打开注册中心

实例数变为2

Nacos

Nacos天生支持负载均衡
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

现在测试一下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;
    }
}

官方文档

Nacos配置文件命名

公式


新建配置
Nacos-Config

命名空间
命名空间

解决多环境多项目管理
dev开发环境
test测试环境
Prod生产环境
保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件
一个大型分布式微服务 系统会有很多微服务子项目,
每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境….
对这些微服务配置进行管理

DataID方案

指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DatalD
新建dev配置DataID
新建test配置DataID

Nacos-Config

通过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
搬家了这个IP不是我了😊

编辑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: '*' #开启监控端点
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。