本文介绍如何基于 Spring Cloud Gateway 和 Spring Cloud Netflix Zuul 使用 Nacos 搭建应用的服务网关。
为什么使用 SAE 服务注册中心 SAE 服务注册中心提供了开源 Nacos Server 的商用版本,使用开源版本 Spring Cloud Alibaba Nacos Discovery 开发的应用可以直接使用 SAE 提供的商业版服务注册中心。
SAE 服务注册中心与 Nacos、Eureka 和 Consul 相比,具有以下优势:
共享组件,节省了部署、运维 Nacos、Eureka 或 Consul 的成本。 在服务注册和发现的调用中都进行了链路加密,保护您的服务,无需再担心服务被未授权的应用发现。 SAE服务注册中心与 AE其他组件紧密结合,为您提供一整套的微服务解决方案,包括环境隔离、灰度发布等。 您在 SAE 部署应用时,SAE服务注册中心以高优先级自动设置Nacos Server服务端地址和服务端口,以及 namespace、access-key、secret-key、context-path 等信息,无需进行任何额外的配置。
基于 Spring Cloud Gateway 搭建服务网关 介绍如何使用 Nacos 基于 Spring Cloud Gateway 从零搭建应用的服务网关。
创建服务网关。 创建命名为spring-cloud-gateway-nacos 的Maven 工程。 在pom.xml文件中添加 Spring Boot 和 Spring Cloud 的依赖。 以 Spring Boot 2.1.4.RELEASE 和 Spring Cloud Greenwich.SR1 版本为例。
org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE
org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2.1.1.RELEASE
org.springframework.cloud spring-cloud-dependencies Greenwich.SR1 pom import
org.springframework.boot
spring-boot-maven-plugin
开发服务网关启动类GatewayApplication。 @SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
在application.yaml中添加如下配置,将注册中心指定为 Nacos Server 的地址。 其中127.0.0.1:8848为 Nacos Server 的地址。如果您的 Nacos Server 部署在另外一台机器,则需要修改成对应的地址。
其中 routes 配置了 Gateway 的路由转发策略,这里我们配置将所有前缀为/provider1/的请求都路由到服务名为service-provider的后端服务中。
server:
port: 15012
spring:
application: name: spring-cloud-gateway-nacos cloud: gateway: # config the routes for gateway routes: - id: service-provider # 将 /provider1/ 开头的请求转发到 provider1 uri: lb://service-provider predicates: - Path=/provider1/** filters: - StripPrefix=1 # 表明前缀 /provider1 需要截取掉 nacos: discovery: server-addr: 127.0.0.1:8848
执行启动类GatewayApplication中的 main 函数,启动 Gateway。 登录本地启动的 Nacos Server 控制台 http://127.0.0.1:8848/nacos (本地 Nacos 控制台的默认用户名和密码同为 nacos),在左侧导航栏中选择服务管理 > 服务列表,可以看到服务列表中已经包含了 spring-cloud-gateway-nacos,且在详情中可以查询该服务的详情。表明网关已经启动并注册成功,接下来我们将通过创建一个下游服务来验证网关的请求转发功能。 创建服务提供者。 创建一个服务提供者的应用,详情请参见将Spring Cloud应用托管到SAE。
服务提供者示例: @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}
结果验证。 本地验证。 本地启动开发好的服务网关和服务提供者,通过访问 Spring Cloud Gateway 将请求转发给后端服务,可以看到调用成功的结果。
EDAS SpringCloud应用开发之搭建服务网管 在 SAE 中验证。 SAE 服务注册中心提供了正式商用版本 Nacos Server。当您将应用部署到 SAE 的时候,SAE 会通过优先级更高的方式去设置 Nacos Server 服务端地址和服务端口,以及 namespace、access-key、secret-key、context-path 信息。您无需进行任何额外的配置,原有的配置内容可以选择保留或删除。
基于 Zuul 搭建服务网关 介绍如何基于 Zuul 使用 Nacos 作为服务注册中心从零搭建应用的服务网关。
创建服务网关。 创建命名为spring-cloud-zuul-nacos的 Maven 工程。 在pom.xml文件中添加 Spring Boot、Spring Cloud 和 Spring Cloud Alibaba 的依赖。 请添加 Spring Boot 2.1.4.RELEASE、Spring Cloud Greenwich.SR1 和 Spring Cloud Alibaba 0.9.0 版本依赖。
org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE
org.springframework.boot spring-boot-starter-webflux
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
org.springframework.cloud spring-cloud-dependencies Greenwich.SR1 pom import
org.springframework.boot
spring-boot-maven-plugin
开发服务网关启动类ZuulApplication。 @SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
在application.properties中添加如下配置,将注册中心指定为 Nacos Server 的地址。 其中127.0.0.1:8848为 Nacos Server 的地址。如果您的 Nacos Server 部署在另外一台机器,则需要修改成对应的地址。
其中 routes 配置了 Zuul 的路由转发策略,这里我们配置将所有前缀为/provider1/的请求都路由到服务名为service-provider的后端服务中。
spring.application.name=spring-cloud-zuul-nacos server.port=18022
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
zuul.routes.opensource-provider1.path=/provider1/** zuul.routes.opensource-provider1.serviceId=service-provider
执行 spring-cloud-zuul-nacos 中的 main 函数ZuulApplication,启动服务。 登录本地启动的 Nacos Server 控制台 http://127.0.0.1:8848/nacos (本地 Nacos 控制台的默认用户名和密码同为 nacos),在左侧导航栏中选择服务管理 > 服务列表,可以看到服务列表中已经包含了 spring-cloud-zuul-nacos,且在详情中可以查询该服务的详情。表明网关已经启动并注册成功,接下来我们将通过创建一个下游服务来验证网关的请求转发功能。 创建服务提供者 如何快速创建一个服务提供者请参见将Spring Cloud应用托管到SAE。 服务提供者启动类示例: @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}
结果验证。 本地验证。 本地启动开发好的服务网关 Zuul 和服务提供者,通过访问 Spring Cloud Netflix Zuul 将请求转发给后端服务,可以看到调用成功的结果。
EDAS SpringCloud应用开发之搭建Zuul网管 在 SAE 中验证。 您可以参考将Spring Cloud应用托管到SAE,将您的应用部署到 EDAS,并验证。
SAE 服务注册中心提供了正式商用版本 Nacos Server。当您将应用部署到 SAE 的时候,SAE 会通过优先级更高的方式去设置 Nacos Server 服务端地址和服务端口,以及 namespace、access-key、secret-key、context-path 信息。您无需进行任何额外的配置,原有的配置内容可以选择保留或删除。
FAQ 使用其他版本 示例中使用的 Spring Cloud 版本为 Greenwich,对应的 Spring Cloud Alibaba 版本为 2.1.1.RELEASE。Spring Cloud Finchley 对应的 Spring Cloud Alibaba 版本为 2.0.1.RELEASE,Spring Cloud Edgware 对应的 Spring Cloud Alibaba 版本为 1.5.1.RELEASE。
说明 Spring Cloud Edgware 版本的生命周期已结束,不推荐使用这个版本开发应用。 从 ANS 迁移 SAE 注册中心在服务端对 ANS 和 Nacos 的数据结构做了兼容,在同一个命名空间下,且 Nacos 未设置 group 时,Nacos 和 ANS 客户端可以互相发现对方注册的服务。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。