You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/06/23 03:41:06 UTC
[servicecomb-docs] branch master updated: [SCB-2019]update gateway
documents for zuul to use spring cloud huawei
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git
The following commit(s) were added to refs/heads/master by this push:
new e27beac [SCB-2019]update gateway documents for zuul to use spring cloud huawei
e27beac is described below
commit e27beac8a8793c41cb556a3c78463574b8a5a82d
Author: liubao <bi...@qq.com>
AuthorDate: Mon Jun 22 11:33:21 2020 +0800
[SCB-2019]update gateway documents for zuul to use spring cloud huawei
---
.../zh_CN/docs/edge/by-servicecomb-sdk.md | 2 +-
java-chassis-reference/zh_CN/docs/edge/nginx.md | 87 +++++++-------
.../zh_CN/docs/edge/open-service.md | 8 +-
java-chassis-reference/zh_CN/docs/edge/zuul.md | 127 ++-------------------
java-chassis-reference/zh_CN/docs/toc.md | 6 +-
java-chassis-reference/zh_CN/mkdocs.yml | 6 +-
6 files changed, 67 insertions(+), 169 deletions(-)
diff --git a/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md b/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
index 2f3b060..4d1cc6e 100644
--- a/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
+++ b/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
@@ -1,4 +1,4 @@
-# 使用 Edge Service 做边缘服务
+# 使用 Edge Service 做网关
Edge Service 是ServiceComb 提供的JAVA网关服务开发框架。Edge Service作为整个微服务系统对外的接口,向最终用户提供服务,接入RESTful请求,转发给内部微服务。Edge Service以开发框架的形式提供,开发者可以非常简单的搭建一个Edge Service服务,通过简单的配置就可以定义路由转发规则。同时Edge Service支持强大的扩展能力,服务映射、请求解析、加密解密、鉴权等逻辑都可以通过扩展实现。
diff --git a/java-chassis-reference/zh_CN/docs/edge/nginx.md b/java-chassis-reference/zh_CN/docs/edge/nginx.md
index f76eb9c..03b628e 100644
--- a/java-chassis-reference/zh_CN/docs/edge/nginx.md
+++ b/java-chassis-reference/zh_CN/docs/edge/nginx.md
@@ -1,91 +1,90 @@
-# 使用confd和Nginx做边缘服务
+# nginx 网关简单介绍
## 概念阐述
### **confd**
-confd是一个轻量级的配置管理工具,源码地址:[https://github.com/kelseyhightower/confd](https://github.com/kelseyhightower/confd),它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最新的配置,然后重新加载服务,完成配置文件的更新。
+confd是一个轻量级的配置管理工具,源码地址:[https://github.com/kelseyhightower/confd](https://github.com/kelseyhightower/confd),
+它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最
+新的配置,然后重新加载服务,完成配置文件的更新。
### **Nginx**
-Nginx \(engine x\)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请参考[http://www.nginx.cn/doc/](http://www.nginx.cn/doc/)。本小节介绍的服务主要使用到的是Nginx的http代理功能。
+Nginx \(engine x\)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请
+参考[http://www.nginx.cn/doc/](http://www.nginx.cn/doc/)。
## 场景描述
-本小节介绍的技术是使用nginx+confd做边缘服务,同时可以对接Java Chassis微服务框架中的服务中心,从服务中心中拉去服务信息通过confd动态更新nginx的配置。
+本小节简单介绍 Nginx 对接服务中心,从服务中心中获取服务信息并通过 confd 动态更新 Nginx 的配置。
-使用nginx+confd动态反向代理的实现步骤可参考文章[http://www.cnblogs.com/Anker/p/6112022.html](http://www.cnblogs.com/Anker/p/6112022.html),本节主要介绍confd如何对接Java Chassis框架的服务中心。
+使用 nginx+confd 动态反向代理的实现步骤可参考文
+章[http://www.cnblogs.com/Anker/p/6112022.html](http://www.cnblogs.com/Anker/p/6112022.html)。
-## 对接服务中心
+* 方法一:http调用
-本节介绍的技术核心在于如何使得confd获取到服务中心的服务信息,服务中心开放了以下接口供外部调用:
+ 服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默
+ 认为default,例如"X-Tenant-Name:default"。
-### **方法一:http调用**
+ * 检查服务中心健康状态
-服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默认为default,例如"X-Tenant-Name:default"。
+ ```
+ GET 127.0.0.1:30100/health
+ ```
-* 检查服务中心健康状态
+ * 获取所有微服务信息
-```
-GET 127.0.0.1:30100/health
-```
+ ```
+ GET 127.0.0.1:30100/registry/v3/microservices
+ ```
-* 获取所有微服务信息
+ * 获取指定id的微服务信息
-```
-GET 127.0.0.1:30100/registry/v3/microservices
-```
-
-* 获取指定id的微服务信息
-
- * 首先根据微服务信息获取serviceId
+ 首先根据微服务信息获取serviceId
GET 127.0.0.1:30100/registry/v3/existence?type=microservice&appId={appId}&serviceName={serviceName}&version={version}
- * 根据上述接口返回的serviceId获取微服务完整信息
+ 根据上述接口返回的serviceId获取微服务完整信息
GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}
-* 获取指定微服务的所有实例信息
+ * 获取指定微服务的所有实例信息
- GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}/instances
+ GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}/instances
- 需要在header中添加:"X-ConsumerId:{serviceId}"。
+ 需要在header中添加:"X-ConsumerId:{serviceId}"。
-* 查找微服务实例信息
+ * 查找微服务实例信息
- GET 127.0.0.1:30100/registry/v3/instances?appId={appId}&serviceName={serviceName}&version={version}
+ GET 127.0.0.1:30100/registry/v3/instances?appId={appId}&serviceName={serviceName}&version={version}
- 需要在header中添加: "X-ConsumerId:{serviceId}"。
-
-
+ 需要在header中添加: "X-ConsumerId:{serviceId}"。
-#### 注意:在实际开发中请访问实际的service-center访问地址,并将上述url中{}的变量替换成具体值,http返回的数据均为json格式
-### **方法二:使用servicecomb开源代码接口**
+* 方法二:使用servicecomb开源代码接口
-在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可获取服务中心的信息,接口描述如下:
+ 在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可
+ 获取服务中心的信息,接口描述如下:
-* 获取所有微服务信息
+ * 获取所有微服务信息
- List<Microservice> getAllMicroservices();
+ List<Microservice> getAllMicroservices();
-* 获取微服务唯一标识
+ * 获取微服务唯一标识
- String getMicroserviceId(String appId, String microserviceName, String versionRule);
+ String getMicroserviceId(String appId, String microserviceName, String versionRule);
-* 根据微服务唯一标识查询微服务静态信息
+ * 根据微服务唯一标识查询微服务静态信息
- Microservice getMicroservice(String microserviceId);
+ Microservice getMicroservice(String microserviceId);
-* 根据多个微服务唯一标识查询所有微服务实例信息
+ * 根据多个微服务唯一标识查询所有微服务实例信息
- List<MicroserviceInstance> getMicroserviceInstance(String consumerId, String providerId);
+ List<MicroserviceInstance> getMicroserviceInstance(String consumerId, String providerId);
-* 按照app+interface+version查询实例endpoints信息
+ * 按照app+interface+version查询实例endpoints信息
- List<MicroserviceInstance> findServiceInstance(String consumerId, String appId, String serviceName,String versionRule);
+ List<MicroserviceInstance> findServiceInstance(String consumerId, String appId, String serviceName,String versionRule);
-通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。
+ 通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。
diff --git a/java-chassis-reference/zh_CN/docs/edge/open-service.md b/java-chassis-reference/zh_CN/docs/edge/open-service.md
index e406c8c..87b2709 100644
--- a/java-chassis-reference/zh_CN/docs/edge/open-service.md
+++ b/java-chassis-reference/zh_CN/docs/edge/open-service.md
@@ -1,5 +1,9 @@
# 服务能力开放
-大量的微服务能力需要通过网关开放给用户、其他外部系统访问。网关一方面扮演着汇集用户请求的作用,同时还会扮演认证、鉴权、流量控制、防攻击的用途。同时,由于网关是一个汇聚点,容易形成业务的瓶颈,通常还会采用多级网关机制,最外层的网关提供主备以及简单的请求转发功能,中间层的实现鉴权等功能,多实例部署。常见的可以用于网关的技术和服务包括LVS、Nginx、Zuul等。
+微服务能力需要通过网关开放给用户、其他外部系统访问。网关一方面扮演着汇集用户请求的作用,同时扮演认证、鉴权、流量
+控制、防攻击的用途。由于网关是一个汇聚点,容易形成业务的瓶颈,通常还会采用多级网关,外层的网关提供主备以及简单
+的请求转发功能,内层网关实现鉴权等功能,多实例部署。常见的可以用于外层网关的技术和服务包括 `LVS`、`DNS`,
+`Nginx` 等,内层网关包括 `spring cloud gateway`、`zuul` 等。
-ServiceComb 也提供了自己的网关服务Edge Service。Edge Service内建了强大的路由策略,支持接口级别的兼容性转发(灰度发布),内嵌ServiceComb治理能力,并支持非常灵活的扩展机制。
+ServiceComb 也提供了内层网关服务 `Edge Service`。Edge Service 内建了强大的路由策略,支持接口级别的
+兼容性转发(灰度发布),内嵌治理能力,并支持非常灵活的扩展机制。
diff --git a/java-chassis-reference/zh_CN/docs/edge/zuul.md b/java-chassis-reference/zh_CN/docs/edge/zuul.md
index e6de123..2df1e68 100644
--- a/java-chassis-reference/zh_CN/docs/edge/zuul.md
+++ b/java-chassis-reference/zh_CN/docs/edge/zuul.md
@@ -1,12 +1,4 @@
-# 使用zuul做边缘服务
-
-## 概念阐述
-
-### API Gateway:
-
-API Gateway是一个服务器,也可以说是进入系统的唯一节点。API Gateway封装内部系统的架构,并且提供API给各个客户端。
-
-### Zuul
+# 使用 `zuul` 和 `spring cloud gateway` 做网关
Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使用Zuul进行以下操作:
@@ -21,114 +13,17 @@ Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使
* 静态相响应处理
* 主动/被动流量管理
-本小节主要介绍在SpringBoot应用中使用Zuul做API Gateway。关于Zuul的详细功能介绍请参考文档[路由器和过滤器:Zuul](https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul)。
-
-## 场景描述
-
-Zuul做API Gateway,即建立一个Zuul Proxy应用,在该Proxy应用中统一定义所有的微服务访问入口,通过使用不同的前缀\(stripped\)来区分各个微服务。本小节通过建立一个ZuulProxy SpringBoot应用来演示Zuul的API Gateway功能。
-
-## 注意事项
-
-本小节介绍的ZuulProxy和ZuulServer等demo都是基于SpringBoot和ServiceComb框架的应用,具体请参考[在Spring Boot中使用java chassis](../using-java-chassis-in-spring-boot/using-java-chassis-in-spring-boot.md)。
-
-## 启动Zuul Proxy
-
-本节介绍如何启动一个zuul proxy应用作为API Gateway。步骤如下:
-
-* **步骤 1**在pom文件中添加依赖:
-
-```xml
-<dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-zuul</artifactId>
-</dependency>
-<dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-ribbon</artifactId>
-</dependency><dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-hystrix</artifactId>
-</dependency>
-<dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>spring-boot-starter-discovery</artifactId>
-</dependency>
-```
-
-* **步骤 2**在SpringBoot主类添加注解:
-
-```java
-@SpringBootApplication
-@EnableServiceComb
-@EnableZuulProxy//新增注解
-public class ZuulMain{
- public static void main(String[] args) throws Exception{
- SpringApplication.run(ZuulMain.class, args);
- }
-}
-```
-
-* **步骤 3**在application.yml文件中定义路由策略:
-
-```yaml
-server:
- port: 8754 #api gateway服务端口
-zuul:
- routes: #路由策略
- discoveryServer: /myServer/** #路由规则
-```
-
-红色的配置项表示可以根据实际开发环境进行配置。关于zuul.routers的路由策略的详细定义规则,请参考官方文献:[路由器和过滤器:Zuul](https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul),可更细粒度地对路由进行控制。
-
-* **步骤 4**在microservice.yaml定义微服务属性:
-
-```yaml
-APPLICATION_ID: discoverytest #服务ID
-service_description:
- name: discoveryGateway #服务名称
- version: 0.0.2 #服务版本号
-servicecomb:
- service:
- registry:
- address: http://127.0.0.1:30100 #服务注册中心地址
- rest:
- address: 0.0.0.0:8082 #微服务端口,可不写
-```
-
-* **步骤 5 **Run ZuulMain Application
-
-## 使用Zuul Proxy
-
-在使用zuul做的API Gateway前,首先要启动在zuul.routers中定义的微服务提供者。
-
-开发服务提供者,开按流程请参考3 开发服务提供者。在微服务microservice.yaml文件中需注意以下两点:
-
-* APPLICATION\_ID需要于zuul proxy中定义的保持一致。
-
-* service\_description.name需要于zuul.routers中相对应。
-
-示例如下:
-
-```yaml
-APPLICATION_ID: discoverytest #与zuul proxy一致
-service_description:
- name: discoveryServer #服务名称,与zuul.routers对应
- version: 0.0.2
-servicecomb:
- service:
- registry:
- address: http://127.0.0.1:30100 #服务注册中心地址
-rest:
- address: 0.0.0.0:8080
-```
-
-API Gateway的访问入口为:[http://127.0.0.1:8754](http://127.0.0.1:8754),所有在zuul.routers中定义的服务都可通过这个访问入口进行代理访问,访问规则如下:
-
-[http://127.0.0.1:8754/myServer/\*\*\*](http://127.0.0.1:8754/myServer/***)
-
-这表示,Http调用[http://127.0.0.1:8754/myServer/\*\*\*](http://127.0.0.1:8754/myServer/***),会转到discoveryServer服务(例如:"/myServer/101"跳转到discoveryServer 服务下的"/101")
+关于Zuul的详细功能介绍请参考[路由器和过滤器:Zuul][zuul-ref]。
-> 如果在服务中心同时存在多个discoveryServer服务\(版本不同\),zuul默认采用Ribbon策略对请求进行转发。
+spring cloud gateway 是 spring cloud 开发的新一代网关服务,详细介绍可以参考[sprig cloud gateway][spring-cloud-gateway-ref]
+使用 `zuul` 和 `spring cloud gateway` 作为网关,核心需要解决的问题是从服务中心发现其他微服务实例,
+需要使用到 [spring cloud huawei][spring-cloud-huawei0] 的组件,
+详细开发指南可以参考[1][spring-cloud-huawei1], [2][spring-cloud-huawei2]
+[zuul-ref]: https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul
+[spring-cloud-gateway-ref]: https://spring.io/projects/spring-cloud-gateway
+[spring-cloud-huawei0]: https://github.com/huaweicloud/spring-cloud-huawei
+[spring-cloud-huawei1]: https://support.huaweicloud.com/devg-servicestage/cse_java_0059.html
+[spring-cloud-huawei2]: https://support.huaweicloud.com/devg-servicestage/cse_java_0064.html
diff --git a/java-chassis-reference/zh_CN/docs/toc.md b/java-chassis-reference/zh_CN/docs/toc.md
index 6d4c10b..5564b93 100644
--- a/java-chassis-reference/zh_CN/docs/toc.md
+++ b/java-chassis-reference/zh_CN/docs/toc.md
@@ -78,9 +78,9 @@
* [配置注入机制](config/inject-config.md)
- 服务能力开放:
- [介绍](edge/open-service.md)
- - [使用Edge Service做边缘服务](edge/by-servicecomb-sdk.md)
- - [使用confd和Nginx做边缘服务](edge/nginx.md)
- - [使用zuul做边缘服务](edge/zuul.md)
+ - [使用 Edge Service 做网关](edge/by-servicecomb-sdk.md)
+ - [使用 `zuul` 和 `spring cloud gateway` 做网关](edge/zuul.md)
+ - [nginx 网关简单介绍](edge/nginx.md)
- 服务打包和运行:
- [以standalone模式打包](packaging/standalone.md)
- [以WEB容器模式打包](packaging/web-container.md)
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml b/java-chassis-reference/zh_CN/mkdocs.yml
index 6af30a0..682ee2c 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -25,9 +25,9 @@ nav:
- 配置注入机制: config/inject-config.md
- 服务能力开放:
- 介绍: edge/open-service.md
- - 使用Edge Service做边缘服务: edge/by-servicecomb-sdk.md
- - 使用confd和Nginx做边缘服务: edge/nginx.md
- - 使用zuul做边缘服务: edge/zuul.md
+ - 使用 Edge Service 做网关: edge/by-servicecomb-sdk.md
+ - 使用 `zuul` 和 `spring cloud gateway` 做网关: edge/zuul.md
+ - nginx 网关简单介绍: edge/nginx.md
- 服务打包和运行:
- 以standalone模式打包: packaging/standalone.md
- 以WEB容器模式打包: packaging/web-container.md