您现在的位置是:首页 >技术交流 >GateWay微服务网关的搭建网站首页技术交流

GateWay微服务网关的搭建

是狼也会孤独 2023-05-24 08:00:04
简介GateWay微服务网关的搭建

服务网关

没有服务网关

问题:地址太多|安全性|管理问题

访问商品服务

http://ip地址:9001/goods/findAll

访问广告服务

http://ip地址:9002/brand/findAll

访问用户服务

http://ip地址:9003/user/findAll

在有网关的情况下,我们配置网关端口号为4006,在访问服务是我们可以通过访问网关进而访问服务,此时端口号访问时都为4006,方便了很多,尤其是前端做跨域配置

访问商品服务

http://ip地址:4006/goods/findAll

访问广告服务

http://ip地址:4006/brand/findAll

访问用户服务

http://ip地址:4006/user/findAll

Spring Cloud Gateway

Spring Cloud Gateway

Spring Cloud Gateway 是 Spring Cloud生态系统中的网关,它是基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发的,旨在为微服务架构提供一种简单有效的、统一的API路由管理方式,并为微服务架构提供安全、监控、指标和弹性等功能。其目标是替代Zuul

路由(Route)

是网关的基本构建块。由一个ID一个目标URI一组断言和一组过滤器定义。断言为真,则路由匹配

断言(predicate)

输入类型是一个ServerWebExchange。我们可以使用它来匹配来自HTTP请求的任何内容

过滤(filter)

可以在请求被路由前或者之后对请求进行修改。

搭建网关

在父项目中,创建网关模块,创建的是maven项目

pom.xml依赖配置


 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>books</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>books-gateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--配置中心客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!--默认加载bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <target>11</target>
                    <source>11</source>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

主启动类

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

bootstartp.yml

server:
  port: 4006
spring:
  application:
    name: books-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false    #不开启服务注册和发现的功能
          lower-case-service-id: true #请求路径上的服务名称转换为小写
      #路由配置
      routes:
        #管理员访问接口路由
        - id: admin
          uri: lb://books-admin
          predicates:
            - Path=/sys/**
        #书籍访问接口路由
        - id: books
          uri: lb://books-books
          predicates:
            - Path=/books/**
        #读者访问接口路由
        - id: reader
          uri: lb://books-reader
          predicates:
            - Path=/reader/**
        #阅览室访问接口路由
        - id: readRoom
          uri: lb://books-readRoom
          predicates:
            - Path=/readRoom/**
        #书商访问接口路由
        - id: booksSeller
          uri: lb://books-booksSeller
          predicates:
            - Path=/booksSeller/**
        #规则制度访问接口路由
        - id: rules
          uri: lb://books-rules
          predicates:
            - Path=/rules/**
        #藏书馆访问接口路由
        - id: collectionLocation
          uri: lb://books-collectionLocation
          predicates:
            - Path=/collectionLocation/**



      globalcors:
        # 解决options请求被拦截问题
        add-to-simple-url-handler-mapping: true
        cors-configurations:
          # 拦截的请求
          '[/**]':
            # 允许跨域的请求
            #allowedOrigins: "*" # spring boot2.4以前的配置
            allowedOriginPatterns: "*" # spring boot2.4以后的配置
            # 允许请求中携带的头信息
            allowedHeaders: "*"
            # 运行跨域的请求方式
            allowedMethods: "*"
            # 是否允许携带cookie
            allowCredentials: true
            # 跨域检测的有效期,单位s
            maxAge: 36000

    config:
      uri: http://localhost:9010
      label: master
      #books-dev.yml
      name: books
      profile: dev

logging:
  pattern:
    console: '%d{MM/dd HH:mm:ss.SSS} %clr(%-5level) ---  [%-15thread] %cyan(%-50logger{50}):%msg%n'

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。