请稍等 ...
×

采纳答案成功!

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

GateWay 多路由 第二个路由的服务无法访问

在这里输入代码gateway:
discovery:
locator:
enabled: true
routes:
- id: goods
uri: lb://wxzm-goods
predicates:
- After=2010-01-20T17:42:47.789-07:00[America/Denver]
- id: test
uri: lb://wxzm-user
predicates:
- RemoteAddr=192.168.1./255
多个路由 自由第一个路由有用
比如说上面配置
localhost:8888/goods/queryAll 能够访问。(goods 服务 feign user 服务)
localhost:8888/user/querAll 404 (user 服务 feign good服务)
吧id goods test 互换一下。
那么请求的结果就是
localhost:8888/goods/queryAll 404(goods 服务 feign user 服务)
localhost:8888/user/querAll 能够访问。 (user 服务 feign good服务)

请求http://localhost:8888/statistics/feignQueryAll
图片描述

server:
  port: 8888
spring:
  application:
    name: wxzm-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 47.107.232.244:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: goods
          uri: lb://wxzm-goods
          predicates:
            - After=2010-01-20T17:42:47.789-07:00[America/Denver]
        - id: test
          uri: lb://wxzm-user
          predicates:
            - After=2010-01-20T17:42:47.789-07:00[America/Denver]
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
logging:
  level:
    org.springframework.cloud.gateway: trace



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

5回答

上游猴子 2020-04-30 21:43:35

当配置的谓词工厂都不满足的时候,会走默认的路由配置,也就是 http://网关/{注册的服务名称}/{具体接口地址},不做任何的路由配置也是通过此格式请求具体服务的接口。

0 回复 有任何疑惑可以回复我~
  • 大目 #1
    http://网关/{注册的服务名称}/{具体接口地址}
    这种路由是由你设置了discovery:locator:enabled: true
    
    而用http://网关/{微服务的接口地址} 是你自定义的路由控制的。
    
    看下手记https://www.imooc.com/article/290804
    课上我也强调了两种路由配置导致的URL是不同的。
    回复 有任何疑惑可以回复我~ 2020-04-30 22:50:10
上游猴子 2020-04-30 21:39:17

这种似乎是对的, 因为你请求网关时,只要满足 路由谓词工厂,那么他会拿到当前谓词工厂对应路由配置的uri, 在结合你请求的地址信息,去做转发。

无论你请求 goods 服务接口或 user 服务接口, 第一处谓词工厂满足,那么他自然是拿 第一处的  uri 做为转发的根据。

0 回复 有任何疑惑可以回复我~
  • 源代码我没有看, 但应该可以推敲出来, 通过路由配置,然后再请求网关,这时候从网关地址上是不知道你要请求的具体服务的,他肯定是没有实现这种根据接口替你找到具体服务的功能。只能是通过谓词给你匹配你配置的路由配置,拿到uri 转发额。
    回复 有任何疑惑可以回复我~ 2020-04-30 21:50:47
大目 2020-03-16 21:09:59

我需要完整的代码。您贴出来的部分,我觉得没问题

0 回复 有任何疑惑可以回复我~
大目 2020-03-16 19:52:15

哈哈,竟有此事?很有趣的一个问题哦!我看您的配置没啥问题…
能否提供下完整的代码呢?我来看看。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕村9469909 #1
    已经贴了代码了。 还有个问题,就是我的nacos 是云服务上的 。sentinel 也是云服务器上的。 运行接口的时候,sentinel 能够获到 服务名称。但是就是获取不到监控的数据。看了一下日志,访问的是192.168.1.3 本地的IP 。怎么才能让云上的sentinel 监控本地的服务
    回复 有任何疑惑可以回复我~ 2020-03-16 20:27:26
  • 大目 回复 提问者 慕村9469909 #2
    我需要完整的代码。您贴出来的部分,我觉得没问题。
    
    可以看下视频《 8-11 Sentinel与控制台通信原理剖析》
    
    Sentinel Dashboard是用微服务注册到Dashboard上的IP+端口主动请求微服务的。因此,可以微服务绑定一个公网IP,并将公网IP注册到Sentinel Dashboard;或者将Sentinel Dashboard和微服务部署在同一局域网内。
    
    ​
    回复 有任何疑惑可以回复我~ 2020-03-17 00:15:34
提问者 慕村9469909 2020-03-16 18:28:43

https://img1.sycdn.imooc.com//szimg/5e6f54da08da784215011502.jpg
具体的配置

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