Nacos注册中心配置安装和问题解决

依赖:



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config

===========================

nginx 配置:
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    
    upstream niginx-cluster{
    
    server 127.0.0.1:8845 ;
    server 127.0.0.1:8846 ;
    server 127.0.0.1:8847 ;
    
    }
    
server {

    listen       8848;
    server_name  localhost;

    location /nacos {
        proxy_pass http://niginx-cluster;
    }
    

    error_page 500 502 503 504 /50x.html;
    location = /50.html {
        root  html;
    }    
}            
}
nacos application.properties配置:
server.servlet.contextPath=/nacos
server.port=8847
nacos.inetutils.ip-address=127.0.0.1
spring.datasource.platform=mysql
db.num=1
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=root
db.password.0=1234
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.metrics.export.elastic.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=true
nacos.core.auth.server.identity.key=
nacos.core.auth.server.identity.value=
nacos.istio.mcp.server.enabled=false

nacos cluster.conf配置
127.0.0.1:8845
127.0.0.1:8846
127.0.0.1:8847


启动三个nacos服务
访问 http://localhost:8848/nacos
登录 name:nacos  password:nacos

将服务注册到nacos 中 java  yml配置
spring:
  application:
    name: userservice
  profiles:
    active: dev  #环境
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        file-extension: yaml   #文件后缀名
这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据
${spring.application.name}.${spring.cloud.nacos.config.file-extension}作为文件Data ID,来读取nacos的配置。
========================================================
环境隔离(nacos config 支持 Namespace Group Data Id 来定位一个配置集(配置文件),可以通过不同的组合实现配置集的隔离。)
Namespace (命名空间)—> 不同环境
Group(分组) —> 不同项目 / 模块
Data Id (文件ID)—> 不同配置文件

读取配置
spring:
  application:
    name: user-service
#  profiles:
#    active: test # 指定环境
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # nacos 配置中心地址
        file-extension: yaml  # 文件扩展名
        namespace: f81a11fe-73f4-4dff-b70d-04009fa36710 # 指定namespace的id
        group: DEFAULT_GROUP # 指定组名

======================================================
(集群架构cmd文件 set MODE='CLUSTER')(set MODE='')
注册失败问题
1.删除nacos服务的data文件夹
2.如果nacos启动后cluster.conf配置中新增了IP;说明nacos启动时服务的IP不对需要修改,删除新增的IP;禁用虚拟机的网卡等
3.修改application.properties配置 nacos.inetutils.ip-address=127.0.0.1
4.重新启动nacos
=======================================================
配置文件优先级(注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。)
配置文件优先级
nacos服务中的配置(后加载的配置会覆盖前面的配置)
服务名-profile.yml
服务名称.yml
本地配置
bootstrap.yml
application.yml


======================================================
# 配置文件的优先级
# profile 方式 >  默认配置文件 > extension-configs ( 扩展配置,下标越大 优先级越大)> shared-configs(共享配置)
bootstrap.yml文件,它会在application.yml之前被读取,而且其内容优先级高于application.yaml

配置文件优先加载哪一个呢
首先如果配置中心有配置会使用配置中心的
配置中心会先使用服务名称-环境名称.yaml
再使用服务名称.yaml
配置中心没有配置
会先使用application.yml的
最后使用bootstrap.yml的(但是容器启动会先加载bootstrap.yml,然后application.yml会覆盖之前的)
============================
多模块负载均衡
复制配置 -Dserver.port=端口号
===========================
配置中心
# nacos 配置中心信息
spring:
  cloud:
    nacos:
        server-addr: 39.103.194.102:8848         # nacos 服务端地址
        discovery:
            cluster-name:  SH  #集群地址自定义杭州      
        username: nacos                          # nacos 用户名
        password: nacos                          # nacos 用户密码
        config:
            file-extension: yaml                  # 配置文件类型   默认 properties 类型
            # namespace: public                   # 命名空间  默认 public  如果配置了 public  循环打印clientWork日志, public 默认不配置
            # group: DEFAULT_GROUP                # 分组 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
            # enabled: true                       # 通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config
            # refresh-enabled: false              # nacos  客户端无法感知
            shared-configs:                       # 使用自定义配置文件时,data-id 必须加文件类型,否则报错
              - data-id: com.mj.dataid-1.yaml
                #group 默认分组 DEFAULT_GROUP
                refresh: true
            extension-configs:
              - data-id: com.mj.dataid-2.yaml
                #group 默认分组 DEFAULT_GROUP
                refresh: true
        
==========================================
热更新:
局部方式: 使用@RefreshScope注解标注在使用配置信息的类上
全局方式:    先使用@ConfigurationProperties注解将配置读取读取到一个对象上,然后在需要使用配置的类中注入配置对象
在nacos服务端配置多环境
动态刷新   在使用的Bean 上加入 @RefreshScope 注解即可
@RestController
@RequestMapping("/nacos")
@RefreshScope
public class NacosController {
    @Value("${user.name}")
    private String username;
    @Value("${user.password}")
    private String password;

    @GetMapping("/get")
    public String getUsername() {
        return this.username + this.password;
    }
}
========================================
负载均衡规则(:
1、线性轮询策略; RoundRibbonRule                                        com.netflix.loadbalancer.RoundRobinRule?#设置负载均衡
2、重试策略; RetryRule                                                   com.netflix.loadbalancer.RetryRule
3、加权响应时间策略;WeightedResponseTimeRule                           com.netflix.loadbalancer.WeightedResponseTimeRule
4、随机策略; RandomRule                                                com.netflix.loadbalancer.RandomRule
5、客户端配置启动线性轮询策略;ClientConfigEnabledRoundRobbinRule         com.netflix.loadbalancer.ClientConfigEnabledRoundRobbinRule     
6、最空闲策略; BestAvailableRule                                         com.netflix.loadbalancer.BestAvailableRule
7、过滤性线性轮询策略;PredicateBasedRule                                com.netflix.loadbalancer.PredicateBasedRule
8、区域感知轮询策略;ZoneAvoidanceRule                                    com.netflix.loadbalancer.ZoneAvoidanceRule
9、可用性过滤策略。 AvailabilityFilteringRule)                            com.netflix.loadbalancer.AvailabilityFilteringRule

方式一
ribbon:
  eager-load:
    enabled: true  #开启饥饿加载;减少服务器响应时间(默认懒加载);提前加载服务bean对象
    clients: userservice #指定饥饿加载的服务
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
    
NacosRule负载均衡策略:
(1)优先选择同集群实例服务列表
(2)同集群找不到提供者,才会到其他集群寻找,并且会报警告
(3)确定了实例后,再采用随机负载均衡挑选实例。
#NFLoadBalancerRuleClassName: com.order.nacos.NacosWeightLoadBalancerRule

方式二
@SpringBootApplication
public class OrderApplication {

  public static void main(String[] args) {
    SpringApplication.run(OrderApplication.class, args);
  }

  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }


//配置负载均衡规则
  @Bean
  public IRule randonrule() {
    return new RandomRule();
  }
}

你可能感兴趣的:(config,java,servlet,开发语言)