依赖:
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();
}
}