• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Spring cloud gateway工作流程原理解析

java 搞代码 4年前 (2022-01-05) 56次浏览 已收录 0个评论

这篇文章主要介绍了Spring cloud gateway工作流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

spring cloud gateway的包结构(在Idea 2019.3中展示)

这个包是spring-cloud-gateway-core.这里是真正的spring-gateway的实现的地方.

为了证明,我们打开spring-cloud-starter-gateway的pom文件

   org.springframework.cloudspring-cloud-starter org.springframework.cloudspring-cloud-gateway-core org.springframework.bootspring-boot-starter-webflux

除了cloud-start,starter-webflux就是cloud-gateway-core.所以后面我们就分析

cloud-gateway-core这个jar包.

其中actuate中定义了GatewayControllerEndpoint,它提供了对外访问的接口.

 // TODO: Flush out routes without a definition @GetMapping("/routes") public Flux<Map> routes() { return this.routeLocator.getRoutes().map(this::serialize); } @GetMapping("/routes/{id}") public Mono<ResponseEntity<Map>> route(@PathVariable String id) { //...... } //以下方法是继承于父类,抽象类AbstractGatewayControllerEndpoint @PostMapping("/refresh") public Mono ref<b style="color:transparent">来源gao@dai!ma.com搞$代^码网</b>resh() { this.publisher.publishEvent(new RefreshRoutesEvent(this)); return Mono.empty(); } @GetMapping("/globalfilters") public Mono<HashMap> globalfilters() { return getNamesToOrders(this.globalFilters); } @GetMapping("/routefilters") public Mono<HashMap> routefilers() { return getNamesToOrders(this.GatewayFilters); } @GetMapping("/routepredicates") public Mono<HashMap> routepredicates() { return getNamesToOrders(this.routePredicates); } @PostMapping("/routes/{id}") @SuppressWarnings("unchecked") public Mono<ResponseEntity> save(@PathVariable String id, @RequestBody RouteDefinition route) {} @DeleteMapping("/routes/{id}") public Mono<ResponseEntity> delete(@PathVariable String id) { return this.routeDefinitionWriter.delete(Mono.just(id)) .then(Mono.defer(() -> Mono.just(ResponseEntity.ok().build()))) .onErrorResume(t -> t instanceof NotFoundException, t -> Mono.just(ResponseEntity.notFound().build())); } @GetMapping("/routes/{id}/combinedfilters") public Mono<HashMap> combinedfilters(@PathVariable String id) { // TODO: missing global filters }

config包里定义了一些Autoconfiguration和一些properties.读取配置文件就在这里完成.

我们这里看一下GatewayProperties.java

 @ConfigurationProperties("spring.cloud.gateway") @Validated public class GatewayProperties { /** * List of Routes. */ @NotNull @Valid private List routes = new ArrayList(); /** * List of filter definitions that are applied to every route. */ private List defaultFilters = new ArrayList(); private List streamingMediaTypes = Arrays .asList(MediaType.TEXT_EVENT_STREAM, MediaType.APPLICATION_STREAM_JSON); #该类包括三个属性,路由列表,默认过滤器列表和MediaType列表.路由列表中的路由定义RouteDefinition. 过滤器中定义的FilterDefinition.

discovery定义了注册中心的一些操作.

event定义了一系列事件,都继承自ApplicationEvent.

filter定义了spring gateway实现的一些过滤器,包括gatewayfilter,globalfilter.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是Spring cloud gateway工作流程原理解析的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Spring cloud gateway工作流程原理解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址