请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于谓词工厂的路由,访问地址的问题

前置条件: 课程上朝九晚五的接口已经实现,达到预期结果
问题一:在实践的过程中,同个接口有两种访问形式,一种是带微服务前缀的访问方法,另一种是不带前缀,两个接口均能打到微服务上并且能访问成功,这是为什么?如果两个微服务的前缀不同子路径相同,那么会不会造成冲突?程序怎么知道我要打的是哪个微服务上面?
问题二:带前缀访问的方式不会走谓词工厂的判断一直是访问成功的状态,而不带前缀的访问方式它会去走为此工厂的判断条件,那这又出现一个问题,谓词工厂形同虚设?

正在回答 回答被采纳积分+3

2回答

提问者 WittChen 2022-09-25 10:07:11

通过实践解决上面问出的绝大多数问题

问题一:两个路由地址均能访问的原因是因为,这两段配置,注意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相同,那么他会打到哪个服务上,留个悬念^ ^

0 回复 有任何疑惑可以回复我~
提问者 WittChen 2022-09-25 09:15:09

个人感觉老是需要补录一个这个谓词工厂的章节,不管是您手记中,还是问题区,都有大多数同学问相同的问题,就实际运用来讲老师这个章节对谓词工厂是十分欠缺的,运用中会碰到好多问题,这个坑老师并没有带着我们去踩,当然只是个人建议

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信