网站建设如何传视频国外优秀购物网站设计

目录
Nacos配置中心
配置中心存在的必要性
Nacos的使用
添加配置
获取配置
编写程序读取配置
修改配置中心的配置并发布
Data ID
服务部署
Nacos和Eureka的区别
Nacos配置中心
除了注册中⼼和负载均衡之外, Nacos还是⼀个配置中心, 具备配置管理的功能.
Namespace 的常⽤场景之⼀是不同环境的配置区分隔离. 例如开发测试环境和⽣产环境的配置隔离。
配置中心存在的必要性
当前项⽬的配置都在代码中, 会存在以下问题:
1. 配置⽂件修改时, 服务需要重新部署. 微服务架构中, ⼀个服务可能有成百个实例, 挨个部署⽐较麻烦, 且容易出错.
2. 多⼈开发时, 配置⽂件可能需要经常修改, 使⽤同⼀个配置⽂件容易冲突.
配置中⼼就是对这些配置项进⾏统⼀管理. 通过配置中心, 可以集中查看, 修改和删除配置, ⽆需再逐个修改配置⽂件. 提⾼效率的同时, 也降低了出错的风险。

1. 服务启动时, 从配置中⼼读取配置项的内容, 进⾏初始化.
2. 配置项修改时, 通知微服务, 实现配置的更新加载.
Nacos的使用
添加配置
注意: 配置管理的命名空间和服务列表的命名空间是隔离的, 两个是分别设置的. 默认是public
也就是服务管理命名空间配置 ≠ 配置管理的命名空间
新建配置项

说明:
1. Data ID 设置为项⽬名称
2. 配置内容的数据格式, ⽬前只⽀持 properties 和 yaml 类型
3. 设置配置内容
获取配置
引入Nacos Config依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> <!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
配置bootstrap.properties
微服务启动前, 需要先获取nacos中配置, 并与application.yml配置合并. 在微服务运⾏之前, Nacos要求必须使⽤ bootstrap.properties 配置⽂件来配置Nacos Server 地址和命名空间。
spring.application.name=product-service
spring.cloud.nacos.config.server-addr=47.98.109.138:8848spring.cloud.nacos.config.namespace=29e05465-894c-48dc-8ed9-37e6a6a0eed9
或者使用bootstrap.yml
spring:cloud:nacos:discovery:server-addr: 47.98.109.138:8848config:server-addr: 47.98.109.138:8848namespace: 29e05465-894c-48dc-8ed9-37e6a6a0eed9
注意
spring.application.name 需要和nacos配置管理的Data ID⼀致.
spring.cloud.nacos.config.server-addr 为Nacos Server的地址.配置中⼼和注册中⼼的配置是隔离的
Nacos 配置中⼼: spring.cloud.nacos.config.server-addr
Nacos 注册中⼼: spring.cloud.nacos.discovery.server-addr
编写程序读取配置
package product.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class NacosController {@Value("${nacos.config}")private String nacosConfg;@RequestMapping("/getConfig")public String getConfig(){return "从Nacos获取配置项nacos.config:"+nacosConfg;}
}
运行结果:

修改配置中心的配置并发布



再次读取配置:

此时我们发现从配置中心读取到的配置并没有发生改变。
如果需要配置中心的配置修改了,立刻就能读取到,需要添加一个注解:@RefreshScope
修改后的代码
package product.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RefreshScope
@RestController
public class NacosController {@Value("${nacos.config}")private String nacosConfg;@RequestMapping("/getConfig")public String getConfig(){return "从Nacos获取配置项nacos.config:"+nacosConfg;}
}
再次读取配置:

再次修改配置中心的配置并读取:

Data ID
在 Nacos Spring Cloud 中, dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
说明:
• prefix 默认为 spring.application.name 的值, 也可以通过配置项
spring.cloud.nacos.config.prefix 来配置.
• spring.profiles.active 即为当前环境对应的 profile. 当 spring.profiles.active
为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${fileextension}
• file-exetension 为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension 来配置。⽬前只⽀持 properties
和 yaml 类型. 默认为properties.
微服务启动时, 会从Nacos读取多个配置⽂件:
1. ${prefix}-${spring.profiles.active}.${file-extension} 如: product-service-dev.properties
2. ${prefix}.${file-extension} , 如: product-service.properties
3. ${prefix} 如product-service
观察项目启动后的日志:

${spring.application.name}, ${spring.profiles.active} 等通过配置⽂件来指定时, 必须放在
bootstrap.properties ⽂件中。
在bootstrap.yml中添加以下内容:
spring:profiles:active: dev
在Nacos配置中心添加三个配置,Data ID分别为:product-service,product-service.properties,product-service-dev.properties。




此时进行读取配置:

如果删掉Data ID为product-service-dev.properties的配置后,再次读取配置:

如果删掉Data ID为product-service.properties的配置后,再次读取配置:

由此可知:
三个⽂件的优先级为: product-service-dev.properties > product-service.properties > product-service
注意
1. bootstrap.yml 设置的配置格式必须和nacos控制台配置的数据格式保持⼀致.
2. 不设置配置格式(spring.cloud.nacos.config.file-extension)时, 默认为properties
服务部署
在配置不同环境的application.yml文件后,在启动项目时,可能会遇到以下报错:

解决方法:在pom.xml文件中的<build></build>中添加以下信息:
<resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource> </resources>
1. 修改数据库, Nacos等相关配置
2. 对两个服务进⾏打包
3. 上传jar到Linux服务器
4. 启动Nacos
启动前最好把data数据删除掉.
5. 启动服务
#后台启动order-service, 并设置输出⽇志到logs/order.log
nohup java -jar order-service.jar >logs/order.log &
#后台启动product-service, 并设置输出⽇志到logs/order.log
nohup java -jar product-service.jar >logs/product-9090.log &
#启动实例, 指定端⼝号为9091
nohup java -jar product-service.jar --server.port=9091 >logs/product-9091.log &
启动好服务后访问:

Nacos和Eureka的区别
二者都支持服务注册和服务拉取。
区别
1.架构和工作原理
Eureka:Eureka是Netflix开发的一款基于REST的服务注册与发现组件,广泛应用于基于Spring Cloud构建的微服务架构中。Eureka包含Eureka Server(服务注册中心)和Eureka Client(服务实例)。Eureka Server负责维护服务注册表,使得各个分布式服务能够相互发现并进行通信。Eureka Client则负责服务的注册、续约、心跳发送和注销等操作。Eureka通过Replicate进行数据同步,确保所有Eureka Server中的注册信息一致。
Nacos:Nacos是阿里巴巴开源的一款服务发现、配置和管理微服务的中间件。Nacos不仅支持服务注册与发现,还提供了动态配置管理和服务元数据管理等功能。Nacos支持基于DNS和基于RPC的服务发现,并提供了对服务的实时健康检查功能。
2.阈值和自我保护
Eureka:Eureka具有自我保护模式,当网络分区故障发生时,Eureka Server会进入自我保护状态,防止因网络波动导致的正常服务实例被误剔除。Eureka的自我保护阈值是针对所有服务的。
Nacos:Nacos的阈值是针对某个具体Service的,而不是针对所有服务。此外,Nacos支持CP(一致性)和AP(可用性)两种模式,可以根据配置识别并应用相应的模式。
3.连接和健康检查
Eureka:Eureka使用短连接,服务实例定时向Eureka Server发送心跳以更新其服务状态。Eureka只支持心跳模式的健康检查。
Nacos:Nacos使用Netty实现长连接,支持更高效的通信。对于临时实例,Nacos采用心跳模式检测健康状态;对于永久实例,则采用主动请求来检测健康状态。
4.服务发现模式
Eureka:Eureka只支持定时拉取模式的服务发现,即服务消费者定时从Eureka Server拉取服务注册表信息。
Nacos:Nacos支持定时拉取和订阅推送两种模式的服务发现。服务消费者可以选择订阅推送模式,以便在服务注册表发生变化时及时获得通知。
5.实例类型
Eureka:Eureka只支持临时实例,即服务实例的注册信息会随着心跳的停止而被自动注销。
Nacos:Nacos支持永久实例和临时实例两种类型。永久实例需要手动注销,而临时实例则会在心跳停止后被自动注销。
6.功能扩展
Eureka:Eureka专注于服务注册与发现,虽然功能强大且易于集成到Spring Cloud中,但在动态配置管理和服务元数据管理方面相对较弱。
Nacos:Nacos不仅提供了服务注册与发现功能,还集成了动态配置管理和服务元数据管理等功能。这使得Nacos在微服务架构中能够扮演更加全面的角色。
7.CAP理论
Eureka遵循AP原则, Nacos可以切换AP和CP模式,默认AP。
Nacos 根据配置识别CP或者AP模式. 如果注册Nacos的Client的节点是临时节点, 那么Nacos对这个Client节点的效果就是AP, 反之是CP. AP和CP可以同时混合存在。
