关于谓词工厂的路由,访问地址的问题
来源:10-7 自定义路由谓词工厂

WittChen
2022-09-25
前置条件: 课程上朝九晚五的接口已经实现,达到预期结果
问题一:在实践的过程中,同个接口有两种访问形式,一种是带微服务前缀的访问方法,另一种是不带前缀,两个接口均能打到微服务上并且能访问成功,这是为什么?如果两个微服务的前缀不同子路径相同,那么会不会造成冲突?程序怎么知道我要打的是哪个微服务上面?
问题二:带前缀访问的方式不会走谓词工厂的判断一直是访问成功的状态,而不带前缀的访问方式它会去走为此工厂的判断条件,那这又出现一个问题,谓词工厂形同虚设?
2回答
-
WittChen
提问者
2022-09-25
通过实践解决上面问出的绝大多数问题
问题一:两个路由地址均能访问的原因是因为,这两段配置,注意locator.enable为true会自动生成,这也是为什么 微服务名/path能访问到微服务的原因,下面这段是我们自己配置的路由规则,因此可以不加前缀打到微服务上面
gateway: discovery: locator: # 让gateway通过服务发现组件找到其他的微服务 # 并且自动生成路由地址 enabled: true routes: - id: custom_route uri: lb://cloud-demo2 predicates: - TimeBetween=06:00, 09:00, HH:mm
问题二:加一个小配置,这里需要跟微服务约定好让他在地址上加一个统一的前缀,我这里用的是demo2,另个微服务配置server.servlet.context-path=/demo2 即可,这样就间接解决了冲突的问题,不同微服务有不同的前缀,这里我删掉了locator.enable配置,不自动生成路由,这样就解决了形同虚设的问题,只有我们手动配置的路由才生效
routes: - id: custom_route uri: lb://cloud-demo2 predicates: - TimeBetween=06:00, 09:00, HH:mm - Path=/demo2/**
还剩一个我没实践,就是如果两个微服务Path相同,那么他会打到哪个服务上,留个悬念^ ^
00 -
WittChen
提问者
2022-09-25
个人感觉老是需要补录一个这个谓词工厂的章节,不管是您手记中,还是问题区,都有大多数同学问相同的问题,就实际运用来讲老师这个章节对谓词工厂是十分欠缺的,运用中会碰到好多问题,这个坑老师并没有带着我们去踩,当然只是个人建议
014天前
相似问题