mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
全面使用nacos,舍弃zookeeper
This commit is contained in:
@@ -1,22 +1,20 @@
|
||||
# 快速体验
|
||||
|
||||
> 运行环境:JDK8,Maven3,Zookeeper,Mysql
|
||||
> 运行环境:JDK8,Maven3,[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`,修改相关配置
|
||||
|
@@ -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`
|
||||
|
@@ -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`全局唯一。
|
||||
|
||||
我们推荐接口名的命名规则应该是:`服务模块.业务模块.功能模块.行为`,如:
|
||||
|
||||
|
@@ -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`分支。
|
||||
|
||||
步骤如下:
|
||||
|
||||
|
@@ -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
|
||||
# 使用eureka,填:eureka,使用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)
|
@@ -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:
|
||||
# 使用eureka,填:eureka,使用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)
|
@@ -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`中
|
||||
|
||||
|
@@ -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
|
||||
```
|
||||
|
||||
## 如何关闭签名验证
|
||||
|
||||
- 针对某一个接口关闭签名验证
|
||||
|
Reference in New Issue
Block a user