SpringCloud智能网关入门介绍

简介: 通过之前几篇Spring Cloud中几个核心组件的介绍:Eureka用于服务的注册与发现,Ribbon或Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,似乎一个微服务框架已经完成了。但是,为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,如果这些功能实现在微服务中,导致在工作中除了要考虑实际的业务逻辑之外,还需要额外为每个微服务增加对外接口访问的控制处理,或增加一个代理调用来实现权限控制。服务网关就是解决这类问题的方案。

问题


通过之前几篇Spring Cloud中几个核心组件的介绍:Eureka用于服务的注册与发现,Ribbon或Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,似乎一个微服务框架已经完成了。

但是,为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,如果这些功能实现在微服务中,导致在工作中除了要考虑实际的业务逻辑之外,还需要额外为每个微服务增加对外接口访问的控制处理,或增加一个代理调用来实现权限控制。

服务网关就是解决这类问题的方案。

服务网关起到的作用


为了解决上面这些问题,我们需要将权限控制从我们的微服务中抽离出去,而最适合这些逻辑的地方就是处于对外访问的最前端,并且需要一个更强大一些的均衡负载器,它就是服务网关。

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制、调用频率限制、统一异常处理、合并请求等功能。Spring Cloud Netflix中的Zuul就是这样的一个角色,为微服务架构提供了前置保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

构建服务网关


  • 新建Spring Boot项目 springcloud-api-gateway,添加依赖
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.4.RELEASE</version>
  <relativePath/>
</parent>
<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>Dalston.SR1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
  • 创建应用主类,并使用 @EnableZuulProxy注解开启Zuul的功能。
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
/**
 * 网关服务启动主类
 * @author Yezhiwei
 * @date 17/12/4
 */
@SpringCloudApplication
@EnableZuulProxy
public class Server {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Server.class).web(true).run(args);
    }
}
30. import org.springframework.boot.builder.SpringApplicationBuilder;
31. import org.springframework.cloud.client.SpringCloudApplication;
32. import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
33. 
34. /**
35.  * 网关服务启动主类
36.  * @author Yezhiwei
37.  * @date 17/12/4
38.  */
39. @SpringCloudApplication
40. @EnableZuulProxy
41. public class Server {
42.     public static void main(String[] args) {
43.         new SpringApplicationBuilder(Server.class).web(true).run(args);
44.     }
45. }
• 在 application.properties文件中增加服务名、端口号、eureka注册中心的地址
46. spring.application.name=springcloud-api-gateway
47. 
48. #spring.profiles.active=dev
49. 
50. logging.path=./logs
51. server.port=9710
52. 
53. spring.http.encoding.charset=UTF-8
54. spring.http.encoding.enabled=true
55. spring.http.encoding.force=true
56. 
57. spring.mvc.throw-exception-if-no-handler-found=true
58. 
59. 
60. eureka.client.serviceUrl.defaultZone=http://peer1:9600/eureka/,http://peer2:9600/eureka/,http://peer3:9600/eureka/
  • 到这,一个默认的服务网关就构建完毕了。由于Spring Cloud Zuul在整合了Eureka之后,具备默认的服务路由功能,即:当我们这里构建的springcloud-api-gateway应用启动并注册到eureka之后,服务网关会发现上面我们启动的两个服务springcloud-addition-service和springcloud-consumer-hystrix,这时候Zuul就会创建两个路由规则。每个路由规则都包含两部分,一部分是外部请求的匹配规则,另一部分是路由的服务ID。

转发到 springcloud-addition-service服务的请求规则为: /springcloud-addition-service/**

转发到 springcloud-consumer-hystrix服务的请求规则为: /springcloud-consumer-hystrix/**

  • 访问试一下

比如访问 http://localhost:9710/springcloud-addition-service/add?a=1&b=1 该请求将最终被路由到 springcloud-addition-service/add接口上,输出结果为:

springcloud-addition-service服务器端日志如下:

2017-12-12 13:54:39.066  INFO 12850 --- [http-nio-9601-exec-1] c.g.s.controller.Add
相关文章
|
2月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
480 3
|
6天前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
8月前
|
人工智能 Cloud Native 安全
DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集
诚挚地感谢每一位持续关注并使用 Higress 和 Spring AI Alibaba 的朋友,DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集中。
722 119
|
7月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
7月前
|
存储 监控 安全
工业物联网关应用:PLC数据通过智能网关上传阿里云实战
本文介绍如何使用智能网关将工厂PLC数据传输至阿里云平台,适合中小企业远程监控设备状态。硬件准备包括三菱FX3U PLC、4G智能网关和24V电源。接线步骤涵盖PLC编程口与网关连接、运行状态检测及天线电源接入。配置过程涉及通讯参数、阿里云对接和数据点映射。PLC程序关键点包括数据上传触发和温度值处理。阿里云平台操作包含实时数据查看、数据可视化和规则引擎设置。最后提供常见故障排查表和安全建议,确保系统稳定运行。
653 1
|
8月前
|
监控 物联网
工业智能网关实现北向自定义报文配置流程
北向接口是设备连接物联网云平台的接口,允许云平台统一监管各厂商设备的运行与报警状态。为解决不同公司报文格式差异导致的数据解析问题,工业智能网关支持北向自定义报文功能,用户可配置不同的报文格式,确保数据准确传输。配置流程包括网关中心、IOT数据云平台和配置工具的设置,最终通过日志或MQTTfx验证上报情况。
204 4
|
8月前
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
1427 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
10月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
9月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
839 4

热门文章

最新文章