Nacos 入门之使用Nacos做注册中心《一》
consul、eureka、nacos对比配置中心eureka 不支持consul 支持 但用起来非常麻烦,不符合springBoot框架的命名风格,支持动态刷新nacos 支持 用起来简单,符合springBoot的命名风格,支持动态刷新注册中心eureka依赖:依赖ZooKeeper应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现,ACP原则:遵循A...
consul、eureka、nacos对比
配置中心
- eureka 不支持
- consul 支持 但用起来非常麻烦,不符合springBoot框架的命名风格,支持动态刷新
- nacos 支持 用起来简单,符合springBoot的命名风格,支持动态刷新
注册中心
-
eureka
- 依赖:依赖ZooKeeper
- 应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现,
- ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性。
- 版本迭代:2.0不再更新(建议用nacos)
- 集成支持:只支持SpringCloud集成
- 访问协议:HTTP
- 雪崩保护:支持雪崩保护
- 上手:容易
-
consul
- 依赖:不依赖其他组件
- 应用内/外:属于外部应用,侵入性小
- ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。
- 版本迭代:目前仍然进行版本迭代
- 集成支持:支持SpringCloud K8S集成
- 访问协议:HTTP/DNS
- 雪崩保护:不支持雪崩保护
- 上手:复杂
-
nacos
- 依赖:不依赖其他组件
- 应用内/外:属于外部应用,侵入性小
- ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍)
- 版本迭代:目前仍然进行版本迭代
- 集成支持:支持Dubbo 、SpringCloud、K8S集成
- 访问协议:HTTP/动态DNS/UDP
- 雪崩保护:支持雪崩保护
背景
Netflix OSS下的诸多重要组件先后宣布停止新功能开发的大背景,而Spring Cloud Alibaba是一个新生项目,正处于高速迭代中,还很好用
下载
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos clean install -U
cd distribution/target/nacos-server-$version/nacos/bin
安装
sh startup.sh -m standalone
熟悉服务
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8088'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
Nacos集成开发
SpringBoot启动配置管理
添加依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${latest.version}</version>
</dependency>
-
配置地址
nacos.config.server-addr=127.0.0.1:8848
-
使用 @NacosPropertySource 加载 dataId 为 example 的配置源,并开启自动更新
@SpringBootApplication @NacosPropertySource(dataId = "example", autoRefreshed = true) public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); } }
-
过 Nacos 的 @NacosValue 注解设置属性值。
@Controller @RequestMapping("config") public class ConfigController { @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private boolean useLocalCache; @RequestMapping(value = "/get", method = GET) @ResponseBody public boolean get() { return useLocalCache; } }
-
启动 NacosConfigApplication,调用
curl http://localhost:8088/config/get
,返回内容是 false -
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"
-
访问 http://localhost:8088/config/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。
启动服务发现
-
添加依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <version>${latest.version}</version> </dependency>
-
使用 @NacosInjected 注入 Nacos 的 NamingService 实例
@Controller @RequestMapping("discovery") public class DiscoveryController { @NacosInjected private NamingService namingService; @RequestMapping(value = "/get", method = GET) @ResponseBody public List<Instance> get(@RequestParam String serviceName) throws NacosException { return namingService.getAllInstances(serviceName); } } @SpringBootApplication public class NacosDiscoveryApplication { public static void main(String[] args) { SpringApplication.run(NacosDiscoveryApplication.class, args); } }
-
启动 NacosDiscoveryApplication,调用
curl http://localhost:8088/discovery/get?serviceName=example
,此时返回为空 JSON 数组[],因为这个时候服务还没有注册 -
注册服务
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8088'
-
再访问
curl http://localhost:8088/discovery/get?serviceName=example
,此时返回内容为[ { "instanceId": "127.0.0.1-8088-DEFAULT-example", "ip": "127.0.0.1", "port": 8088, "weight": 1.0, "healthy": true, "cluster": { "serviceName": null, "name": "", "healthChecker": { "type": "TCP" }, "defaultPort": 80, "defaultCheckPort": 80, "useIPPort4Check": true, "metadata": {} }, "service": null, "metadata": {} } ]
-
更多推荐
所有评论(0)