SpringCloud学习(十)Spring Cloud Gateway服务网关

在SpringBoot2.x版本后,spring出了自己的Spring Cloud Gateway服务网关以替代停止开发进入维护的以及性能不算很好的Zuul。

一)创建一个gateway-server服务网关子工程
新建工程后,在pom.xml文件中引入以下依赖:


        
            org.springframework.cloud
            spring-cloud-starter-gateway
            
        
    

由于spring-cloud-starter-gateway依赖包含了spring-boot-starter-webflux,由于web与webflux是不同的Web栈(可自行去了解),两者都存在的情况下,默认会选择web,假如不移除spring-boot-starter-web依赖,则会报错:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.

所以这里我们需要先移除spring-boot-starter-web依赖。

SpringCloud学习(十)Spring Cloud Gateway服务网关_第1张图片

创建一个application启动类;

package com.ningmeng.gatewayserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class GatewayServerApplication {

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

application.yml配置文件:

#工程端口号
server:
  port: 8001

#eureka注册中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ #eureka服务器所在的地址

spring:
  application:
    name: gateway-server #工程名
  rabbitmq:
    host: 14.23.124.140
    port: 40071
    username: guest
    password: guest
  #网关配置
  cloud:
    gateway:
      routes:
        ##ribbon-consumer调用  两种方式(实际中以第二种方式配置并持久化数据库): 服务url的方式:http://localhost:3001/   或者注册服务serviceId的方式: lb://ribbon-consumer
        - id: ribbon
          uri: lb://ribbon-consumer
          predicates:
            - Path=/ribbon/**
          filters:
            - StripPrefix=1
        ##feign-consumer调用  两种方式(实际中以第二种方式配置并持久化数据库): 服务url的方式:http://localhost:4001/   或者注册服务serviceId的方式: lb://feign-consumer
        - id: feign
          uri: lb://feign-consumer
          predicates:
            - Path=/feign/**
          filters:
            - StripPrefix=1

参数说明:
id:自定义的路由id,唯一
uri:路由服务的访问地址
predicates:断言,即路由规则
filters:过滤规则

可根据源码RouteDefinition类去找对应要设置的属性:
SpringCloud学习(十)Spring Cloud Gateway服务网关_第2张图片
SpringCloud学习(十)Spring Cloud Gateway服务网关_第3张图片
最后依次启动eureka-server、config-server、service-provider、ribbon-consumer、feign-consumer以及gateway-server工程,并访问http://localhost:8001/ribbon/ribbonConsumer?time=2016以及http://localhost:8001/feign/feignConsumer?time=2017,可看到成功返回数据:
在这里插入图片描述
在这里插入图片描述
这里访问的http://localhost:8001/ribbon/ribbonConsumer?time=2016最终会由gateway根据predicates断言(相当于路由规则)路由到http://localhost:3001/ribbonConsumer?time=2016

本篇完结!

github代码地址:https://github.com/huijunzeng/springCloudDemo.git

你可能感兴趣的:(SpringCloud)