目录

  • 一、简介
  • 二、配置
    • 2.1、pom文件
  • 三、配置文件
    • 3.1、application.properties
  • 四、主类

一、简介

  在微服务架构中,我们的服务往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务(比如我们请求: http://10.130.3.88:7001/test/getPort ),就需要知道它们具体的地址信息,例如 IP 地址、端口号等这种方式存在以下问题:

  • 客户端需要维护大量的服务地址,这对于客户端来说,是非常繁琐复杂的
  • 当服务地址更改时,客户端维护更麻烦,每个使用到的都要更改
  • 身份认证的难度大,每个微服务需要独立认证
  • 可能会存在跨域请求的问题。

这个时候我们的Spring Cloud Gateway 就很好的解决这些问题了,它的主要功能特征如下:

  • 基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建
  • 能够在任意请求属性上匹配路由
  • predicates(断言) 和 filters(过滤器)是特定于路由的
  • 集成了 Hystrix 熔断器
  • 集成了 Spring Cloud DiscoveryClient(服务发现客户端)
  • 易于编写断言和过滤器
  • 能够限制请求频率
  • 能够重写请求路径

  其实说这么多,还是很懵,直接说,怎么用吧?来来来,干起来!!!

二、配置

2.1、pom文件

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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>cn.alian.microservice</groupId><artifactId>parent</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>gateway-service</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway-service</name><description>网关服务</description><dependencies><!-- 健康检查--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- gateway --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- eureka-client --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- hystrix --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!-- 使用okhttp3 --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></dependency></dependencies>
</project>

  为了使其简单,我这里使用okhttp。其他的依赖相信大家都耳熟能详了,就不过多的解释了。

三、配置文件

3.1、application.properties

#服务名
spring.application.name=gateway-service
#端口
server.port=9999#gateway开启服务注册和发现的功能
spring.cloud.gateway.discovery.locator.enabled=true
#将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
#与Eureka注册服务中心的通信zone和url地址
eureka.client.serviceUrl.defaultZone=http://10.130.3.222:8761/eureka
#实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true
eureka.client.register-with-eureka=false
#该实例,相较于hostname是否优先使用IP
eureka.instance.prefer-ip-address=true#跨域问题
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods=*#相同header多个值时的处理方式,三种规则可选(RETAIN_FIRST|RETAIN_UNIQUE|RETAIN_LAST)
#spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
#actuator健康检查
management.endpoints.web.exposure.include=*
management.endpoints.web.cors.allowed-origins=localhost#部署时配置加上
#logging.config=config/logback.xml

  感觉配置已经说得很明白了就不再解释了,这里稍微说明下,配置中心和网关中心都可以注册到Eureka,但是网关服务没有连接数据库的情况下,就没必要弄成配置中心的客户端了,它主要还是做路由的作用,并且它的地址是需要配置到配置中心,让其他服务获取的。

四、主类

GatewayServiceApplication.java

package com.alian.microservice.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonConfiguration;@RibbonClients(defaultConfiguration = {OkHttpRibbonConfiguration.class})
@EnableEurekaClient
@SpringBootApplication
public class GatewayServiceApplication {public static void main(String[] args) {SpringApplication.run(GatewayServiceApplication.class, args);}}

  全局配置负载均衡算法: @RibbonClients(defaultConfiguration = {OkHttpRibbonConfiguration.class})

  • RibbonClients设置的必须为@Configuration类
  • 该@Configuration类不能被@ComponentScan引用
  • 不能与@SpringBootApplication类在同一个包下(默认扫描的位置是当前启动类所在的包以及启动类所在包下面的所有可扫描注解),否则将作为共享方法使用,无法针对单个服务配置。

  到这里我们的网关中心也可以使用了,启动完成后提供服务的地址是:

  • 网关中心的地址是: http://10.130.3.222:9999

(八)Alian 的 Spring Cloud Gateway 网关中心相关推荐

  1. (十八)Alian 的 Spring Cloud Gateway 集群配置

    目录 一.简介 二.配置 三.配置文件 3.1.application.properties 四.主类 五.部署及配置 5.1.部署 5.2.Nginx配置 5.3.Spring Cloud Gate ...

  2. (七)Alian 的 Spring Cloud Config 配置中心(客户端)

    目录 一.背景 二.maven依赖 三.配置文件 四.验证 一.背景   通过上一篇文章,我们已经搭建了配置中心了,接下里我们继续改造我们的订单服务了,之前我们的订单服务的数据库配置还是写在配置文件中 ...

  3. Spring Cloud Gateway网关

    Spring Cloud Gateway网关 1. 简介 Spring Cloud Gateway是Spring官网基于Spring 5.0. Spring Boot 2.0.Project Reac ...

  4. Spring Cloud Gateway网关实现短网址生成、解析、转发

    Spring Cloud Gateway网关实现短网址生成.解析.转发 1.概述 2.基础实现 3.路由处理HandlerFunction 4.配置路由 5.测试 1.概述 在一些生成二维码等场景中, ...

  5. (十一)Alian 的 Spring Cloud 文档中心(swagger聚合文档)

    目录 一.简介 1.1.maven依赖 二.核心配置类 2.1.SwaggerUI配置 2.2.服务定义的上下文 2.3.定时刷下文档定义 2.4.文档接口 三.配置 3.1.主类 3.2.boots ...

  6. spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定

    一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...

  7. 【硬核】Spring Cloud Gateway(网关)

    概念 Gateway是基于异步非阻塞模型上进行开发的,有springcloud团队开发.用来代替Zuul. 近几个月收集了收集了N份精校过的PDF版的Java八股文大全,涉及Java后端的方方面面,分 ...

  8. spring cloud gateway网关和链路监控

    文章目录 目录 文章目录 前言 一.网关 1.1 gateway介绍 1.2 如何使用gateway 1.3 网关优化 1.4自定义断言和过滤器 1.4.1 自定义断言 二.Sleuth--链路追踪 ...

  9. Spring Cloud Gateway 网关整合 Knife4j

    文章目录 1:环境准备 2:gateway服务设置 1:导包 2:yml配置 3:添加配置类,从网关服务中获取服务列表 4:重写并覆盖/swagger-resources接口 3:其他业务逻辑服务设置 ...

最新文章

  1. 深度学习数据集定义与加载
  2. python好学嘛-马哥教育官网-专业Linux培训班,Python培训机构
  3. 文计笔记2: 计算机硬件知识
  4. 【PL/SQL】学习笔记 (7)光标的属性,一个会话中打开光标数的限制
  5. SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
  6. 数据结构之插入排序:折半插入排序算法
  7. Function(洛谷-P1464)
  8. TestNG介绍 - 1
  9. Python爬虫开发【第1篇】【urllib2】
  10. 【LeetCode】【字符串】题号:412. Fizz Buzz
  11. php mysql访问不,php不能访问mysql怎么办
  12. SpringBoot+Quartz实现动态可配定时任务(动态定时任务)
  13. 区块链开发主流编程语言居然是Go语言!
  14. 小程序云开发添加html页面,微信小程序云开发js抓取网页内容
  15. 判断点是否在点组成的封闭区域内c++
  16. OWASP的s-sdlc项目优秀分享
  17. Java_08 快速入门 Java常用类库
  18. 工信部叫停苹果 Callkit,微信不能直接接听视频了
  19. vue首次加载生命周期
  20. 医学免疫学 Chapter4:抗体

热门文章

  1. 最简单的自定义视频播放进度条
  2. 基础系统数据录入有感
  3. 新型网站木马爆发,众多知名网站沦陷
  4. Android Studio中src/main/res/values中strings.xml文件中字符串使用
  5. CountDownLatch 用法和详解
  6. 顶尖专家戳穿媒体谎言:5G宣传大部分是假的!
  7. 汽车销售管理系统源代码
  8. 群晖note station新版本一直显示“正在加载”解决方法
  9. 客户端复制文件到服务器出现错误,文件服务器利用DFS迁移后导致部分客户端访问共享文件出错...
  10. SSM+mysql机票订购系统-计算机毕业设计源码07780