Skip to content

Commit 1f5e310

Browse files
committed
add dubbo nacos readme
1 parent 688b94d commit 1f5e310

File tree

2 files changed

+168
-19
lines changed

2 files changed

+168
-19
lines changed

README.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# 目录
22

33
### SpringBoot相关实例
4-
- ##### [SpringBoot集成Atomikos框架实现分布式数据库XA事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-atomikos-xa-sample "SpringBoot集成Atomikos框架,实现分布式数据库XA事务;")
5-
- ##### [SpringBoot集成Seata框架实现TCC模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-seata-tcc-sample "SpringBoot集成Seata框架,实现TCC模式柔性事务;")
6-
- ##### [SpringBoot集成Seata框架实现AT模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-seata-at-sample "SpringBoot集成Seata框架,实现AT模式柔性事务;")
7-
- ##### [SpringBoot集成Sharding-JDBC框架实现数据库读写分离;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-shardingsphere-jdbc-sample "SpringBoot集成Sharding-JDBC框架,实现数据库读写分离;")
8-
- ##### [SpringBoot集成Hmily框架实现TCC模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-hmily-tcc-sample "SpringBoot集成Hmily框架,实现TCC模式柔性事务;")
9-
- ##### [SpringBoot集成gRPC框架实现RPC服务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-rpc-grpc-sample "SpringBoot集成gRPC框架,实现RPC服务;")
10-
- ##### [SpringBoot集成Thrift框架实现RPC服务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-rpc-thrift-sample "SpringBoot集成Thrift框架,实现RPC服务;")
4+
- ##### [SpringBoot集成Atomikos框架-实现分布式数据库XA事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-atomikos-xa-sample "SpringBoot集成Atomikos框架,实现分布式数据库XA事务;")
5+
- ##### [SpringBoot集成Seata框架-实现TCC模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-seata-tcc-sample "SpringBoot集成Seata框架,实现TCC模式柔性事务;")
6+
- ##### [SpringBoot集成Seata框架-实现AT模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-seata-at-sample "SpringBoot集成Seata框架,实现AT模式柔性事务;")
7+
- ##### [SpringBoot集成Sharding-JDBC框架-实现数据库读写分离;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-shardingsphere-jdbc-sample "SpringBoot集成Sharding-JDBC框架,实现数据库读写分离;")
8+
- ##### [SpringBoot集成Hmily框架-实现TCC模式柔性事务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-hmily-tcc-sample "SpringBoot集成Hmily框架,实现TCC模式柔性事务;")
9+
- ##### [SpringBoot集成gRPC框架-实现RPC服务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-rpc-grpc-sample "SpringBoot集成gRPC框架,实现RPC服务;")
10+
- ##### [SpringBoot集成Thrift框架-实现RPC服务;](https://github.com/ipipman/JavaSpringBootSamples/tree/master/springboot-rpc-thrift-sample "SpringBoot集成Thrift框架,实现RPC服务;")
1111

1212
### Dubbo相关实例
13-
- ##### [分布式服务框架Dubbo基于注解配置的方式](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-annotation-sample "分布式服务框架Dubbo(基于注解配置的方式)")
14-
- ##### [分布式服务框架Dubbo基于XML配置的方式](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-xml-sample "分布式服务框架Dubbo(基于XML配置的方式")
15-
- ##### [分布式服务框架Dubbo事件通知](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-notify-sample "分布式服务框架Dubbo(事件通知);")
16-
- ##### [分布式服务框架Dubbo异步调用](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-async-sample "分布式服务框架Dubbo(异步调用)")
17-
- ##### [分布式服务框架Dubbo缓存策略](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-cache-sample "分布式服务框架Dubbo(缓存策略)")
18-
- ##### [分布式服务框架Dubbo参数回调](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-callback-sample "分布式服务框架Dubbo(参数回调)")
19-
- ##### [分布式服务框架Dubbo基于HTTP传输协议](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-http-sample "分布式服务框架Dubbo(基于HTTP传输协议)")
20-
- ##### [分布式服务框架Dubbo本地调用](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-local-sample "分布式服务框架Dubbo(本地调用)")
21-
- ##### [分布式服务框架Dubbo隐式参数](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-attachment-sample "分布式服务框架Dubbo(隐式参数)")
22-
- ##### [分布式服务框架DubboMock功能](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-mock-sample "分布式服务框架Dubbo(mock功能)")
23-
- ##### [分布式服务框架DubboSPI机制](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-spi-sample "分布式服务框架Dubbo(SPI机制)")
24-
13+
- ##### [分布式服务框架Dubbo-基于注解配置的方式](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-annotation-sample "分布式服务框架Dubbo(基于注解配置的方式)")
14+
- ##### [分布式服务框架Dubbo-基于XML配置的方式](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-xml-sample "分布式服务框架Dubbo(基于XML配置的方式")
15+
- ##### [分布式服务框架Dubbo-事件通知](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-notify-sample "分布式服务框架Dubbo(事件通知);")
16+
- ##### [分布式服务框架Dubbo-异步调用](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-async-sample "分布式服务框架Dubbo(异步调用)")
17+
- ##### [分布式服务框架Dubbo-缓存策略](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-cache-sample "分布式服务框架Dubbo(缓存策略)")
18+
- ##### [分布式服务框架Dubbo-参数回调](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-callback-sample "分布式服务框架Dubbo(参数回调)")
19+
- ##### [分布式服务框架Dubbo-基于HTTP传输协议](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-http-sample "分布式服务框架Dubbo(基于HTTP传输协议)")
20+
- ##### [分布式服务框架Dubbo-本地调用](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-local-sample "分布式服务框架Dubbo(本地调用)")
21+
- ##### [分布式服务框架Dubbo-隐式参数](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-attachment-sample "分布式服务框架Dubbo(隐式参数)")
22+
- ##### [分布式服务框架Dubbo-Mock功能](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-mock-sample "分布式服务框架Dubbo(mock功能)")
23+
- ##### [分布式服务框架Dubbo-SPI机制](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-spi-sample "分布式服务框架Dubbo(SPI机制)")
24+
- ##### [分布式服务框架Dubbo集成Nacos框架-实现注册中心](https://github.com/ipipman/JavaSpringBootSamples/tree/master/dubbo-nacos-sample "分布式服务框架Dubbo集成Nacos框架-实现注册中心")

dubbo-nacos-sample/README.md

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# 分布式服务框架Dubbo集成Nacos框架实现注册中心
2+
3+
### 什么是Nacos?
4+
Nacos是阿里开源的一个产品,主要针对微服务架构中的服务发现、配置管理、服务治理的综合性解决方案;
5+
Nacos的四大功能:
6+
> - 服务发现与服务健康检查;
7+
> - 动态配置管理;
8+
> - 动态DNS服务;
9+
> - 服务和源数据管理;
10+
11+
### Zookeeper和Nacos的对比
12+
Nacos在微服务场景中,主要用于配置中心和服务注册中心。这两块功能也是Zookeeper擅长的事情,以下我们分析下两者的不同处。
13+
14+
#### 1.Zookeeper
15+
Zookeeper的功能主要是它的树型节点来实现的。当数据变化的时候或者节点过期的时候,会通过事件触发通知对应的客户端数据变化了,然后客户端再请求ZK获取最新的数据,采用push-pull来做数据更新;
16+
17+
其中ZK最重要的就是它的ZAB协议了(消息广播和消息恢复)
18+
**消息广播**:集群中ZK在数据更新的时候,通过Leader节点将消息广播给其他Follower节点,采用简单的两阶段提交模式,先Request->ACK->Commit,当超过一半的Follower节点响应时,就可以提交更新了;
19+
**奔溃恢复**:当Leader挂了,或者超过半数Follower投票得出Leader不可用,那么会重新选举,这段时间内ZK服务是不可用的。通过最新的XID来选举出新的Leader,选举出来的后将新的Leader中的数据更新给超过半数的Follower节点后,此时才能对外提供服务;
20+
21+
#### 2.Nacos
22+
Nacos中配置中心和注册中心分别是两套实现,和ZK不同。
23+
##### 2.1 对比配置中心
24+
Nacos和Zookeeper都可以作为配置中心,做一些可以实时变化的配置数据存储,然后实时更新线上数据。
25+
**Nacos**:依赖Mysql数据库做数据存储,当数据更新的时候,直接更新数据库的数据,然后将数据更新的信息异步广播给Nacos集群中所有服务节点数据变更,再由Nacos服务节点更新本地缓存,然后将通知客户端节点数据变化。
26+
** Zookeeper**:利用ZK的树型结构做数据存储,当有数据更新的时候,使用过半机制保证各个节点的数据一致性,然后通过ZK的事件机制通知客户端。
27+
28+
这里的差异:
29+
> - 服务器存储的位置不同,分别采用Mysql和ZK本身存储;
30+
> - 消息发送,一个采用过半机制保证一致性,另一个异步广播,通过后台线程重试保证;
31+
32+
##### 2.2 对比注册中心
33+
**Nacos**:支持两种方式的注册中心,持久化和非持久化存储服务信息。
34+
> - **非持久化** 直接存储在Nacos服务节点的内存中,并且服务节点采用去中心话的思想,服务节点采用Hash分片存储注册信息;
35+
> - **持久化** 使用Raft协议选举Master节点,同样采用过半机制将数据存储在Leader节点上;
36+
**Zookeeper**:利用zk的树型结构做数据存储,服务注册和消费信息直接存储在zk树形节点上,集群下同样采用过半机制保证服务节点间一致性;
37+
38+
这里的差异:
39+
> - Nacos同时支持 持久化和非持久化存储,也就是支持CAP原则中的AP和CP特性,Nacos的CP持久化和ZK模式类似。Nacos默认采用AP非持久化,非持久化使用内存存储速度更快,而且Hash分片存储,不利点就是某个服务挂掉,可能出现部分时间调用失败。因为服务调用本身就是实时的,持久化存储起来意义不大,反而及时变化更适合。
40+
41+
42+
### Nacos的基础概念
43+
<img src="https://ipman-blog-1304583208.cos.ap-nanjing.myqcloud.com/dubbo/34201608729038_.pic_hd.jpg" width = "430" height = "300" alt="图片名称" align=center />
44+
45+
#### 命名空间
46+
命名空间(NameSpace)用于不同环境(开发环境、测试环境和生产环境)的配置隔离。不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。
47+
48+
#### 配置分组
49+
配置分组是对配置集进行分组,不同的配置分组下可以有相同的配置集(DateId)。默认的配置分组名称为 DEFAULT_GROUP。用于区分不同的项目或应用。
50+
51+
#### 配置集
52+
在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。
53+
54+
55+
### Nacos-Server部署
56+
#### 1.下载安装
57+
```json
58+
//下载编译后的最新zip包
59+
https://github.com/alibaba/nacos/releases
60+
61+
//解压
62+
unzip nacos-server-$version.zip
63+
cd nacos/bin
64+
65+
//启动
66+
sh startup.sh -m standalone
67+
```
68+
69+
#### 2.测试注册中心和配置中心
70+
```json
71+
//服务注册
72+
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
73+
74+
//服务发现
75+
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
76+
77+
//发布配置
78+
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
79+
80+
//获取配置
81+
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
82+
```
83+
84+
#### 3.登录Nacos-Server控制台
85+
<img src="https://ipman-blog-1304583208.cos.ap-nanjing.myqcloud.com/dubbo/1651608729573_.pic.jpg" width = "620" height = "340" alt="图片名称" align=center />
86+
87+
```json
88+
//访问
89+
http://127.0.0.1:8848/nacos
90+
91+
//用户名&密码
92+
nacos
93+
nacos
94+
```
95+
96+
### Dubbo集成Nacos为注册中心
97+
#### 1.Nacos默认注册中心是AP实现,如果需要CP实现的业务可以进行如下设置;
98+
```json
99+
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
100+
```
101+
102+
#### 2.修改Provider配置,将registry默认Zookeeper的地址改为Nacos地址
103+
```json
104+
<?xml version="1.0" encoding="UTF-8"?>
105+
106+
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
107+
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
108+
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
109+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
110+
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
111+
<context:property-placeholder/>
112+
113+
<dubbo:application name="nacos-provider"/>
114+
115+
<dubbo:registry address="nacos://10.211.55.6:8848"/>
116+
117+
<dubbo:protocol name="dubbo" port="20880"/>
118+
119+
<bean id="demoService" class="com.ipman.dubbo.nacos.sample.impl.DemoServiceImpl"/>
120+
121+
<dubbo:service interface="com.ipman.dubbo.nacos.sample.api.DemoService" ref="demoService"/>
122+
</beans>
123+
```
124+
125+
#### 3.修改Consumer配置,将registry默认Zookeeper的地址改为Nacos地址
126+
```json
127+
<?xml version="1.0" encoding="UTF-8"?>
128+
129+
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
130+
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
131+
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
132+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
133+
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
134+
<context:property-placeholder/>
135+
136+
<dubbo:application name="nacos-consumer"/>
137+
138+
<dubbo:registry address="nacos://10.211.55.6:8848"/>
139+
140+
<dubbo:reference id="demoService" check="false" interface="com.ipman.dubbo.nacos.sample.api.DemoService"/>
141+
</beans>
142+
```
143+
144+
#### 4.启动服务进行测试
145+
##### 4.1 查看Nacos控制台中的Dubbo注册的服务列表
146+
<img src="https://ipman-blog-1304583208.cos.ap-nanjing.myqcloud.com/dubbo/1051608730158_.pic.jpg" width = "820" height = "340" alt="图片名称" align=center />
147+
148+
##### 4.2 查看Nacos控制台中的Dubbo注册的消费者列表
149+
<img src="https://ipman-blog-1304583208.cos.ap-nanjing.myqcloud.com/dubbo/1061608730173_.pic.jpg" width = "820" height = "340" alt="图片名称" align=center />

0 commit comments

Comments
 (0)