Spring Cloud服务网关整合

简介: 网关网管是程序或者系统之间的连接节点,扮演者程序或系统之间的门户,允许它们之前通过通讯协议交换信息,它们可能是同构或异构系统例如REST API网关WebServices网关使用场景监控(Monitoring)测试 (Testing)动态路由(Dynamic Routing)...

网关

网管是程序或者系统之间的连接节点,扮演者程序或系统之间的门户,允许它们之前通过通讯协议交换信息,它们可能是同构或异构系统
例如

  • REST API网关
  • WebServices网关

使用场景

  • 监控(Monitoring)
  • 测试 (Testing)
  • 动态路由(Dynamic Routing)
  • 服务整合(Service Integeation)
  • 负荷减配(Load Shedding)
  • 安全(Security)
  • 静态资源处理(Static Resources handling)
  • 活跃流量管理(Active traffic management)

数据来源

  • 服务发现
  • 服务注册

通讯方式

  • 协议:二进制、文本
  • 方式:同步、异步

qq1

Spring Cloud Zuul

1.增加依赖

<!-- 依赖 Spring Cloud Netflix Zuul -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>

2.创建zuul代理应用

package com.segumentfault.spring.cloud.lesson11.zuul.proxy;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

/**
 * Zuul 代理引导类
 *
 */
@EnableZuulProxy
@SpringCloudApplication
public class ZuulProxyApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulProxyApplication.class, args);
    }

}

3.配置zuul应用
application.properties

## Zuul 代理应用
spring.application.name = zuul-proxy

## 服务端口
server.port = 6060


4.配置zuul路由规则

## 指定 user-service-provider
zuul.routes.user-service-provider = /user-service/**

## 配置 ribbon
user-service-provider.ribbon.listOfServers = http://localhost:9090/

## http://localhost:8080/user-service/* => http://localhost:9090/*

5.配合HTTP客户端
注意:实际配置Ribbon底层HTTP调用客户端,并非zuul独享此功能

  • 默认客户端:HttpClient
    装配类:HttpClientRibbonConfiguration
  • 配置客户端:OkHttpClient
    装配类:OkHttpRibbonConfiguration

激活配置:ribbon.okhttp.enabled=ture

Spring Cloud整合

服务端口信息
端口信息
​ zuul-proxy : 6060
​ config-server : 7070
​ user-service-client: 8080
​ user-service-provider : 9090
​ eureka-server : 10000

服务依赖关系

eureka先启然后user-service-provider然后config-server然后user-service-client然后zuul-proxy

config-server配置zuul-proxy信息

configs/zuul-config.properties

## Zuul Proxy 配置内容

## 指定 user-service-provider
zuul.routes.user-service-provider = /user-service/**
## 指定 user-service-client
zuul.routes.user-service-client = /user-client/**

zuul-proxy作为配置客户端

1.增加config client依赖

 <!-- 依赖 Spring Cloud Config Client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

配置config client信息
bootstrap.properties

## Zuul 代理应用
spring.application.name = zuul-proxy

## 配置客户端应用关联的应用
## spring.cloud.config.name 是可选的
## 如果没有配置,采用 ${spring.application.name}
spring.cloud.config.name = zuul-config
## 关联 profile
spring.cloud.config.profile = default
## 关联 label
spring.cloud.config.label = master
## 激活 Config Server 服务发现
spring.cloud.config.discovery.enabled = true
## Config Server 服务器应用名称
spring.cloud.config.discovery.serviceId = config-server
## Spring Cloud Eureka 客户端 注册到 Eureka 服务器
eureka.client.serviceUrl.defaultZone = http://localhost:10000/eureka

zuul-proxy激活服务发现

增加 eureka Client依赖

 <!-- 依赖 Spring Cloud Netflix Eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

下面知识只做了解


ZuulFilter调用链
qq2
 RequestContext context = RequestContext.getCurrentContext();
            context.setZuulEngineRan();

            try {
                preRoute();
            } catch (ZuulException e) {
                error(e);
                postRoute();
                return;
            }
            try {
                route();
            } catch (ZuulException e) {
                error(e);
                postRoute();
                return;
            }
            try {
                postRoute();
            } catch (ZuulException e) {
                error(e);
                return;
            }

Zuul自动装配

ZuulServletFilter使用范围更大,可以拦截所有的Servlet,包括ZuulServlet
ZuulServlet会有URL匹配的模式,url-pattern
Zuul有两种的激活模式:

  • @EnableZuulProxy
    导入ZuulProxyMarkerConfiguration,随后生成一个ZuulProxyMarkerConfiguration.Marker()Bean,这个Bean作为ZuulProxyAutoConfiguration的装配前置条件。

请注意:ZuulProxyMarkerConfiguration扩展了ZuulServerAutoConfiguration,所以ZuulServlet和ZuulController会被自动装配
ZuulController有DispatcherServlet来在控制,它的映射地址是:“/*”,DispatcherServlet中注册一个ZuulHandlerMapping,它控制映射到ZuulController,可以参考ZuulServerAutoConfiguration:

@Bean
    public ZuulController zuulController() {
        return new ZuulController();
    }

    @Bean
    public ZuulHandlerMapping zuulHandlerMapping(RouteLocator routes) {
        ZuulHandlerMapping mapping = new ZuulHandlerMapping(routes, zuulController());
        mapping.setErrorController(this.errorController);
        return mapping;
    }

通过源码分析,ZuulController 将请求委派给ZuulServlet,所以所有的ZuulFilter 实例都会被执行。

因此,访问 http://localhost:6060/user-service-client/user/find/all ,实际将请求递交给 DispatcherServlet

发送请求"/user-service-client/user/find/all"

  • DispatcherServlet

    • ZuulHandlerMapping

      • ZuulController

        • ZuulServlet

          • RibbonRoutingFilter
  • @EnableZuulServer

导入ZuulServerMarkerConfiguration ,随后生成一个 ZuulServerMarkerConfiguration.Marker() Bean ,主要用作引导装配ZuulServerAutoConfiguration

ZuulServerAutoConfiguration与 父类 ZuulProxyAutoConfiguration 区别:

父类ZuulProxyAutoConfiguration 提供了RibbonRoutingFilter

调用层次:

  • DispatcherServlet

    • ZuulHandlerMapping

      • ZuulController

        • ZuulServlet

          • ZuulFilter
目录
相关文章
|
16天前
|
算法 NoSQL API
SpringCloud&Gateway网关限流
SpringCloud&Gateway网关限流
39 7
|
17小时前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
7 0
|
2天前
|
负载均衡 Java 网络架构
在SpringCloud2023中快速集成SpringCloudGateway网关
本文主要简单介绍SpringCloud2023实战中SpringCoudGateway的搭建。后续的文章将会介绍在微服务中使用熔断Sentinel、鉴权OAuth2、SSO等技术。
24 2
在SpringCloud2023中快速集成SpringCloudGateway网关
|
4天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
13 1
|
6天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
31 6
|
9天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
10天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
11天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
12天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
27 1