Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka应用
Spring Cloud Gateway 应用概述
下面的示例启动两个服务:gataway-server 和 user-service 都注册到注册中心 Eureka上,客户端请求后端服务【user-service】,网关提供后端服务的统一入口。网关通过负载均衡将客户端请求转发到具体的后端服务。
序号 | 服务名称 | 端口号 | 备注 |
---|---|---|---|
1 | gateway-server | 9000 | 网关服务 |
2 | user-service | 8001 | 用户服务 |
3 | eureka-server | 8888 | 注册中心 |
用户服务搭建
用户服务比较简单,只需要注册到注册中心并提供一个测试接口 /user
Maven 依赖
<!--注册中心客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--actuator 监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--配置中心客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
配置文件
#服务暴露顿口号
server.port=8001
#服务名称
spring.application.name=user-service
#注册中心地址
eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICE_URL:http://localhost:8888}/lb/eureka/
management.endpoint.conditions.enabled=true
#优先使用IP地址注册
eureka.instance.prefer-ip-address=true
##服务所属分组名称
#eureka.instance.app-group-name=lkf_group
#服务实例id
eureka.instance.instanceId=${spring.application.name}@${spring.cloud.client.ip-address}@${server.port}
#开放所有页面节点 默认只开启了health、info两个节点
management.endpoints.web.exposure.include=*
暴露服务接口
对外暴露 /user 接口,返回字符串 I’m ok
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
@GetMapping("/user")
public String getUser() {
return "I'm ok";
}
}
网关服务搭建
网关服务提供路由配置、路由断言和过滤器等功能。下面将会分别实现这些功能
Maven 引用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件
注册到注册中心并读取服务列表,支持向注册中心服务列表中的服务路由,这里需要注意,如果 spring.cloud.gateway.discovery.locator.lowerCaseServiceId 不为true,则只能根据服务实例id的大写进行转发,不支持小写的serviceId
#服务暴露顿口号
server.port=9000
#服务名称
spring.application.name=gateway-server
#注册中心地址
eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICE_URL:http://localhost:8888}/eureka/
management.endpoint.conditions.enabled=true
#优先使用IP地址注册
eureka.instance.prefer-ip-address=true
##服务所属分组名称
#eureka.instance.app-group-name=lkf_group
#服务实例id
eureka.instance.instanceId=${spring.application.name}@${spring.cloud.client.ip-address}@${server.port}
#开放所有页面节点 默认只开启了health、info两个节点
management.endpoints.web.exposure.include=*
#启用基于服务发现的路由定位
spring.cloud.gateway.discovery.locator.enabled=true
#启用服务实例id名称小写支持
spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
路由断言
路由断言有很多种,根据请求时间、Host地址、请求路径和请求方法等,这里实现一个基于路径的路由断言匹配
@Bean
public RouterFunction<ServerResponse> testFunRouterFunction() {
RouterFunction<ServerResponse> route = RouterFunctions.route(
RequestPredicates.path("/test"), request -> ServerResponse.ok()
.body(BodyInserters.fromObject("I am testing")));
return route;
}
当请求路径为 /test 时,直接返回结果为 I am testing
过滤器
网关经常需要对路由请求进行过滤,对符合条件的请求进行一些操作,例如:增加请求头、增加请求参数、增加响应头和断路器等功能。
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes().route(r -> r.path("/test/custom").uri("http://ww.baidu.com"))
.route(r -> r.path("/user/**").uri("lb://user-service"))
.build();
}
当请求路径为 /test/custom 时,网关将请求转发到 http://ww.baidu.com;
当请求路径为 /user 时,网关将请求转发到用户服务的/user 接口 ,/user-service/user
客户端访问
向网关发送请求:http://127.0.0.1:9000/user ,
被网关转发到 http://127.0.0.1:9000/user-service/user,得到结果为:I’m ok
Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka应用的更多相关文章
- <Spring Data JPA>二 Spring Data Jpa
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Spring Boot系列二 Spring @Async异步线程池用法总结
1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...
- spring boot 学习(二)spring boot 框架整合 thymeleaf
spring boot 框架整合 thymeleaf spring boot 的官方文档中建议开发者使用模板引擎,避免使用 JSP.因为若一定要使用 JSP 将无法使用. 注意:本文主要参考学习了大神 ...
- Spring boot 入门二:Spring Boot配置文件详解
一.自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/resources目录下创建一个application.properties.同时也支持ym ...
- Spring学习(十二)-----Spring @PostConstruct和@PreDestroy实例
实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...
- Spring学习(十二)-----Spring Bean init-method 和 destroy-method实例
实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...
- spring学习笔记二:spring使用构造方法注入(set方式注入)
项目目录树: 1.spring的依赖包配置 * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/log4j/log4j-1.2.14.jar * SPRIN ...
- Spring Boot系列(二) Spring Boot 之 REST
Rest (Representational Stat Transer) 是一种软件架构风格. 基础理论 架构特性 性能 可伸缩 简化的统一接口 按需修改 组件通信透明 可移植 可靠性 架构约束 C/ ...
- Spring Cloud Gateway转发Spring WebSocket
Spring Cloud Gateway转发Spring WebSocket 源码:https://github.com/naah69/SpringCloud-Gateway-WebSocket-De ...
- spring Cloud网关之Spring Cloud Gateway
Spring Cloud Gateway是什么?(官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/) Spring C ...
随机推荐
- C# Winform 设置窗口打开的特效
https://www.cnblogs.com/mq0036/p/6421946.html using System.Runtime.InteropServices; public class Win ...
- SQL Server 2017 左补齐
DECLARE @NUM CHAR(3)='7 'SELECT RIGHT('0000000'+CONVERT(VARCHAR(50),1+ RTRIM(@NUM)),7)
- Idea查看一个类和子类(实现类)的结构图
选择一个类:右键选择Diagrams-show Diagrams(show Diagrams popup表示悬浮当前窗口) 进入下面类似下面的界面: 如果想查看某个类或接口的子类: 先查看自己本地设置 ...
- stm32 窗口看门狗 WWDG
窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WW ...
- linux环境下composer的安装与使用
一.下载 Composer(安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号.) 1.下载安装脚本 - composer-setup.php - 到当 ...
- css Cascading Style Sheet 层叠样式表
作用 :实现网页布局,美化页面元素 CSS 在文档中的三种方式 1 行内样式/内联样式 特点:在具体的html标签中引入css 代码 语法: 所有的html标签都具有一个style属性,属性值就可以使 ...
- 【Flask+Redis】 python学习第一章 - 7.0 断言 数据库测试 redis学习
assert 断言 def div(num1, num2): # 断言 assert isinstance(num1, int), "值类型错误" assert isinstanc ...
- 特殊权限 - SUID GUID STICKYBIT
◆ SUID ( Set User ID ) Linux里,用户的ID被称作UID.在实际生产中,可能需要临时借用别的用户执行程序,因此需要能够临时变更自己UID的机能叫做SUID.借助SUID权限, ...
- Wannafly挑战赛24-A-石子游戏--【思维题】
链接:https://www.nowcoder.com/acm/contest/186/A 来源:牛客网 石子游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- Nginx中ngx_stream_core_module和ngx_stream_proxy_module
ngx_stream_core_module模块该模块模拟基于tcp或udp的服务连接的反向代理理,即⼯工作于传输层的调度器器指令:17.1 streamSyntax: stream { ... }D ...