全面使用nacos,舍弃zookeeper

This commit is contained in:
tanghc
2019-08-21 16:04:32 +08:00
parent 90d6823693
commit 6e2a0e6c13
36 changed files with 179 additions and 658 deletions

View File

@@ -1,22 +1,20 @@
# 快速体验
> 运行环境JDK8Maven3ZookeeperMysql
> 运行环境JDK8Maven3[Nacos](https://nacos.io/zh-cn/docs/what-is-nacos.html)Mysql
- 安装并启动zookeeper[安装教程](http://zookeeper.apache.org/doc/r3.4.13/zookeeperStarted.html)
- 安装并启动Nacos[安装教程](https://nacos.io/zh-cn/docs/quick-start.html)
- 执行Mysql脚本`sop.sql`
- IDE安装lombok插件然后打开项目(IDEA下可以打开根pom.xml然后open as project)
- 启动注册中心sop-registry运行SopRegistryApplication.java
- 启动网关打开sop-gateway下的`application-dev.properties`
1. 修改数据库`username/password`
2. 指定zookeeper地址如果zookeeper安装在本机则不用改
2. 指定nacos地址如果nacos安装在本机则不用改
3. 运行`SopGatewayApplication.java`
- 启动微服务打开sop-story-web下的`application-dev.properties`文件
1. 指定zookeeper地址如果zookeeper安装在本机则不用改
1. 指定nacos地址如果nacos安装在本机则不用改
2. 运行`SopStoryApplication.java`
- 找到sop-test打开`AllInOneTest.java`进行接口调用测试
确保注册中心先启动
## 使用admin
- 找到`sop-admin/sop-admin-server`工程打开sop-admin-server下的`application-dev.properties`,修改相关配置

View File

@@ -39,10 +39,8 @@
server.port=2222
# 服务名称
spring.application.name=story-service
# eureka注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
# zookeeper配置
spring.cloud.zookeeper.connect-string=localhost:2181
# nacos注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
```
- 在springboot启动类上添加`@EnableDiscoveryClient`

View File

@@ -7,8 +7,8 @@
SOP也是采用这种方式实现大致步骤如下
- 每个服务注册到注册中心在启动的时候把自己的路由信息上传到zookeeper并且保证每一个接口都能对应到哪个服务。
- 网关启动时同样注册到注册中心获取zookeeper上的接口信息保存到本地并监听zookeeper上的接口信息一旦接口信息有修改网关这边能及时进行更新。
- 每个服务注册到nacos
- 网关启动时同样注册到nacos然后从各服务中拉取路由信息
- 网关收到客户端请求后,先进行签名校验,通过之后根据接口信息找到对应的服务,然后进行路由
- 网关对返回结果进行处理(或不处理),返回给客户端。
@@ -16,10 +16,10 @@ SOP也是采用这种方式实现大致步骤如下
在网关定义一个`Map<String, RouteInfo> routeMap = ...`key为接口名+版本号。
网关启动时,从zookeeper中获取路由信息并保存到routeMap中
网关启动时,从各微服务中获取路由信息并保存到routeMap中
```java
routeMap = buildFromZookeeper();
routeMap = requestFormServices();
```
接口请求进来后,根据`方法名+版本号`获取路由信息,然后进行路由转发。
@@ -33,7 +33,7 @@ RouteInfo routeInfo = routeMap.get(method + version);
doRoute(routeInfo);
```
因为有多个服务路由信息注册到zookeeper我们要确保接口名唯一,即`method`全局唯一。
因为nacos需要拉取各个微服务路由信息,接口名有可能会冲突,因此需要确保接口名唯一,即`method`全局唯一。
我们推荐接口名的命名规则应该是:`服务模块.业务模块.功能模块.行为`,如:

View File

@@ -1,8 +1,6 @@
# 使用SpringCloudGateway
SOP默认网关是使用Spring Cloud Zuul您也可以切换成Spring Cloud Gateway完整代码见`SpringCloudGateway`分支。
**注:**SOP对Spring Cloud Gateway的支持目前处于beta阶段推荐使用zuul。
SOP默认网关是使用Spring Cloud Zuul您也可以切换成Spring Cloud Gateway完整代码见`spring-cloud-gateway`分支。
步骤如下:

View File

@@ -1,90 +0,0 @@
# nacos注册中心
使用nacos作为注册中心源码在`registry-nacos`分支
这里演示如何将默认的eureka注册中心替换成nacos步骤如下
- 准备工作
1.安装nacos前往[最新稳定版本](https://github.com/alibaba/nacos/releases)下载最新版nacos
2.启动nacos服务器cd nacos/bin
Linux/Unix/Mac启动命令(standalone代表着单机模式运行非集群模式):
`sh startup.sh -m standalone`
Windows启动命令
`cmd startup.cmd`
或者双击startup.cmd运行文件。
更多访问https://nacos.io/zh-cn/docs/quick-start.html
- 微服务端修改
1.修改微服务应用pom打开`sop-example/sop-story/sop-story-web/pom.xml`注释eureka服务发现依赖添加nacos服务发现依赖
```xml
<!-- 注册中心【只能用一个,不用的注释掉】 -->
<!-- 使用eureka注册中心
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
-->
<!-- 使用nacos注册中心
版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-alibaba-nacos-discovery
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<!-- 注册中心end -->
```
2.yml文件新增nacos配置并注释掉eureka相关配置
```yaml
spring:
cloud:
# nacos注册中心和eureka只能用一个
nacos:
discovery:
server-addr: 127.0.0.1:8848
```
- 网关修改
找到`sop-gateway`工程,步骤同上
- SOP-admin修改
修改yml文件设置nacos服务器地址`registry.name`填nacos
```yaml
# 注册中心地址,根据实际情况改,这里只是参数,并不会去注册
registry:
eureka-server-addr: http://localhost:1111/eureka/
# nacos服务器地址
nacos-server-addr: 127.0.0.1:8848
# 使用eurekaeureka使用nacos填nacos
name: nacos
```
- website-server修改
步骤同`SOP-admin修改`
如果要改成consul注册中心可参照以上步骤。
- 参考资料
1.[nacos介绍及安装](https://nacos.io/zh-cn/docs/quick-start.html)
2.[nacos spring cloud注册发现](https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html)

View File

@@ -1,112 +0,0 @@
# 扩展其它注册中心
**注: nacos注册中心已经实现本篇以nacos为例介绍如何扩展如果要改成consul可按照此方式进行修改**
SOP默认使用eureka注册中心如果要换成nacos注册中心步骤如下
- 实现`com.gitee.sop.registryapi.service.RegistryService`接口
1.找到`SOP/sop-common/sop-registry-api`工程在service.impl包下新建一个类实现RegistryService接口
```java
public class RegistryServiceNacos implements RegistryService {
@Override
public List<ServiceInfo> listAllService(int pageNo, int pageSize) throws Exception {
// TODO: 返回服务实例
}
@Override
public void onlineInstance(ServiceInstance serviceInstance) throws Exception {
// TODO: 实例上线
}
@Override
public void offlineInstance(ServiceInstance serviceInstance) throws Exception {
// TODO: 实例下线
}
}
```
2.在`com.gitee.sop.registryapi.config.BaseRegistryConfig`中新增
```java
/**
* 当配置了registry.name=nacos生效
*
* @return
*/
@Bean
@ConditionalOnProperty(prefix = "registry", name = "name", havingValue = "nacos")
RegistryService registryServiceNacos() {
return new RegistryServiceNacos();
}
```
其中`@ConditionalOnProperty(prefix = "registry", name = "name", havingValue = "nacos")`
表示`application.properties`配置了`registry.name=nacos`参数才能生效registry.name=nacos下文会讲到。
- 微服务端修改
1.修改微服务应用pom.xml注释eureka服务发现依赖添加nacos服务发现依赖
```xml
<!-- 注册中心【只能用一个,不用的注释掉】 -->
<!-- 使用eureka注册中心
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
-->
<!-- 使用nacos注册中心
版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-alibaba-nacos-discovery
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<!-- 注册中心end -->
```
2.yml文件新增nacos配置并注释掉eureka相关配置
```yaml
spring:
cloud:
# nacos注册中心和eureka只能用一个
nacos:
discovery:
server-addr: 127.0.0.1:8848
```
- 网关修改
找到`sop-gateway`工程,步骤同上
- SOP-admin修改
修改yml文件新增nacos服务器地址`registry.name`填nacos
```yaml
# 注册中心地址,根据实际情况改,这里只是参数,并不会去注册
registry:
# 使用eurekaeureka使用nacos填nacos
name: nacos
eureka-server-addr: http://localhost:1111/eureka/
nacos-server-addr: 127.0.0.1:8848
```
- website-server修改
步骤同`SOP-admin修改`
- 参考资料
1.[nacos介绍及安装](https://nacos.io/zh-cn/docs/quick-start.html)
2.[nacos spring cloud注册发现](https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html)

View File

@@ -1,25 +0,0 @@
# 原理分析之路由存储
SOP将路由信息存到了zookeeper当中服务在启动时将自己的路由信息上传到zookeeper中。
网关监听存放路由的节点,动态更新到本地。
zookeeper存储路由的结构如下
```xml
/com.gitee.sop.route 根节点
/serviceId 服务节点,名字为服务名
/route1 路由节点名字为name+version存放路由信息
/route2
/...
```
服务启动时,创建`/serviceId`节点,然后遍历创建`/routeN`节点
同时,网关监听`服务节点``路由节点`,当有新服务加入时,网关会获取到新加入的路由节点信息,
同时路由节点下面的子节点也会被监听到。后续子节点的增删改都会被网关监听到,然后更新到本地。
服务上传路由相关代码在`com.gitee.sop.servercommon.manager.ServiceZookeeperApiMetaManager`类中
网关监听相关代码在`com.gitee.sop.gatewaycommon.manager.BaseRouteManager`

View File

@@ -19,16 +19,6 @@ OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
Story bizObject = openContext.getBizObject(Story.class);
```
## Socket error occurred: `localhost/0:0:0:0:0:0:0:1:2181`: Connection refused
检查本地zookeeper有没启动如果zookeeper在其他机器上修改application-dev.yml
```yaml
cloud:
zookeeper:
connect-string: ip:2181
```
## 如何关闭签名验证
- 针对某一个接口关闭签名验证