之前使用的都是spring cloud的全家桶,Eureka、spring config、spring gateway等组件。为了减少微服务的数量,我们将spring config和Eureka做成了一个服务,既充当服务注册中心,有充当服务配置中心。可是每一次修改完配置文件之后都需要重新启动Eureka来使修改的配置生效,这大大的降低了开发的效率。
注册中心本质是为了解耦服务提供者和服务消费者的。任何一个微服务都应该存在或者支持多个提供者,而提供者的数量和分布是无法预先确定的,因此就需要有一个组件来管理微服务提供者的注册和发现,这个就是注册中心。
- 一致性(Consistency)
- 可用性(Availability)
- 分隔容忍(Partition tolerance)
CAP理论是分布式架构中重要的理论。
一致性就是所有节点在同一时间具有相同的数据,可用性就是保证每个请求不管成功或者失败都有响应,某一个节点挂掉并不会影响整个系统的接受和发出请求,分割容忍就是系统中任意信息的丢失或失败不会影响系统的继续运作。
Nacos | Eureka | Consul | Zookeeper | |
---|---|---|---|---|
CAP理论 | CP+AP | AP | CP | CP |
健康检查 | TCP/HTTP/MYSQL/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
负载均衡策略 | 权重/metadata/Selector | Ribbon | Fabio | - |
雪崩保护 | 有 | 有 | 无 | 无 |
自动注销实例 | 支持 | 支持 | 支持 | 支持 |
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 支持 |
Dubbo集成 | 支持 | 不支持 | 支持 | 支持 |
K8s集成 | 支持 | 不支持 | 支持 | 不支持 |
打开网站 Nacos 的首页,我们可以看到下面的内容,写到 Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
为了方便我们自己开发调试,我们选择通过自己编译源代码来安装Nacos
代码仓库地址:https://github.com/alibaba/nacos.git
通过 git clone
拉取最新代码到本地
找到config》resource》META-INF》nacos-db.sql
这个数据库脚本是mysql版的脚本,将其还原到数据库服务器上,建立相应的表结构。
修改console》src》main》resoures》application.properties
,填入正确的数据库地址
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=123456
使用 mvn -Prelease-nacos -Dmaven.test.skip=true -Drat.skip=true clean install -U
命令编译源代码
设置启动的JVM参数 -Dnacos.standalone=true
开启Nacos,使用浏览器访问http://127.0.0.1:8848/nacos
就可以看到Nacos的网页管理界面了,说明Nacos也开启来了。
新建一个微服务,然后把该微服务注册到Nacos上去,并通过Nacos进行微服务的相关配置。
添加依赖
Spring boot 版本
org.springframework.boot
spring-boot-starter-parent
1.5.16.RELEASE
Spring Cloud 版本
org.springframework.cloud
spring-cloud-dependencies
Edgware.SR5
pom
import
Spring Alibaba Cloud 版本
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.1.1.RELEASE
pom
import
2、配置文件bootstrap.properties
server.port= 38085
spring.application.name=appName
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=106.52.239.153:8848
3、写一个http接口,返回配置文件里的值
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
4、开启应用
开启应用,然后在Nacos的界面里的服务管理下的服务列表可以看到该应用,说明该微服务已经注册到了Nacos。
5、访问接口
访问我们应用的接口
http://localhost:38085/config/get
可以看到应用读取配置文件里的值
直接刷新页面发现返回值已经改变
本文由博客群发一文多发等运营工具平台 OpenWrite 发布