代码完全实现动态服务网关 | 学习笔记

简介: 快速学习 代码完全实现动态服务网关

开发者学堂课程【精通 Spring Cloud Alibaba代码完全实现动态服务网关学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/634/detail/10123


代码完全实现动态服务网关


代码如下:

@Service

public class GatewayService implements ApplicationEventPublisherAware{

private ApplicationEventPublisher publisher;

@Autowired

private RouteDefinitionWriter routeDefinitionWriter;

@Autowired

private MayiktGatewayMapper mayiktGatewayMapper;

@override

publicvoid setApplicationEventPublisher(ApplicationEventPublisher

applicationEventPublisthis.publisher= applicationEventPublisher; }

public String loadAIILoadRoute()

List<GateWayEntity> gateWayEntities= mayiktGatewayMapper.gateWayAII();

for(GateWayEntity gb:

gateWayEntities) {

loadRoute(gb);}
return
success;

}

public String loadRoute(GateWayEntity gateWayEntity) {

RouteDefinition definition= newRouteDefinition();

Map<String, String> predicateParams = new HashMap<>( initialCapacity:8);

PredicateDefinition predicate = new PredicateDefinition();

FilterDefinition filterDefinition = new FilterDefinition();

Map<String,String>filterParams= newHashMap<>(initialCapacity: 8);

URI uri = null;

if ("0".equals(gateWayEntity.getRouteType()))

//如果配置路由 type 0的话 则从注册中心获取服务地址

uri = UriComponentsBuilder.fromUriString("1b://"+ gateWayEntity.getRouteUr1()+"/").build(

} else {

uri=UriComponentsBuilder.fromHttpUrl(gateWayEntity.getRouteUr1()).build().touri();}

//定义的路由唯一的 id

definition.setId(gateWayEntity.getRouteId(OD;

predicate.setName("Path");

//路由转发地址

predicateParams.put("pattern",gateWayEntity.getRoutePattern();

predicate.setArgs(predicateParams);

//名称是固定的, 路径去前缀

filterDefinition.setName("StripPrefix");

filterParams.put("_genkey_0","1");

filterDefinition.setArgs(filterParams);

definition.setPredicates(Arrays.asList(predicate));

definition.setFilters(ArCall to 'asLits with one argument more... (Ctrl+F1)));

definition.setUri(uri);

routeDefinitionWriter.save(Mono.just(definition)).subscribe();

this.publisher.publishEvent(new RefreshRoutesEvent( source: this)); return "success";

}

相关文章
|
1月前
|
安全 5G 网络性能优化
|
2月前
|
监控 负载均衡 安全
微服务(五)-服务网关zuul(一)
微服务(五)-服务网关zuul(一)
|
12天前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
27 1
Gateway服务网关
|
1月前
|
前端开发 Java API
vertx学习总结5之回调函数及其限制,如网关/边缘服务示例所示未来和承诺——链接异步操作的简单模型响应式扩展——一个更强大的模型,特别适合组合异步事件流Kotlin协程
本文是Vert.x学习系列的第五部分,讨论了回调函数的限制、Future和Promise在异步操作中的应用、响应式扩展以及Kotlin协程,并通过示例代码展示了如何在Vert.x中使用这些异步编程模式。
47 5
vertx学习总结5之回调函数及其限制,如网关/边缘服务示例所示未来和承诺——链接异步操作的简单模型响应式扩展——一个更强大的模型,特别适合组合异步事件流Kotlin协程
|
2月前
|
测试技术 微服务
微服务(八)-服务网关zuul(四)
微服务(八)-服务网关zuul(四)
|
2月前
|
监控 前端开发 Java
微服务(七)-服务网关zuul(三)
微服务(七)-服务网关zuul(三)
|
2月前
|
负载均衡 前端开发 安全
微服务(六)-服务网关zuul(二)
微服务(六)-服务网关zuul(二)
|
4月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
3月前
|
运维 Kubernetes 安全
利用服务网格实现全链路mTLS(一):在入口网关上提供mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,用于简化服务治理,包括流量管理和拆分、安全认证及网格可观测性,有效减轻开发运维负担。ASM支持通过mTLS提供服务,要求客户端提供证书以增强安全性。本文介绍如何在ASM入口网关上配置mTLS服务并通过授权策略实现特定用户的访问限制。首先需部署ASM实例和ACK集群,并开启sidecar自动注入。接着,在集群中部署入口网关和httpbin应用,并生成mTLS通信所需的根证书、服务器证书及客户端证书。最后,配置网关上的mTLS监听并设置授权策略,以限制特定客户端对特定路径的访问。
131 2
|
3月前
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway