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

来源:10-7 自定义路由谓词工厂

慕村9469909

2020-03-16

在这里输入代码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



写回答

5回答

上游猴子

2020-04-30

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

0
1
大目
http://网关/{注册的服务名称}/{具体接口地址} 这种路由是由你设置了discovery:locator:enabled: true 而用http://网关/{微服务的接口地址} 是你自定义的路由控制的。 看下手记https://www.imooc.com/article/290804 课上我也强调了两种路由配置导致的URL是不同的。
2020-04-30
共1条回复

上游猴子

2020-04-30

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

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

0
1
上游猴子
源代码我没有看, 但应该可以推敲出来, 通过路由配置,然后再请求网关,这时候从网关地址上是不知道你要请求的具体服务的,他肯定是没有实现这种根据接口替你找到具体服务的功能。只能是通过谓词给你匹配你配置的路由配置,拿到uri 转发额。
2020-04-30
共1条回复

大目

2020-03-16

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

0
0

大目

2020-03-16

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

0
2
大目
回复
慕村9469909
我需要完整的代码。您贴出来的部分,我觉得没问题。 可以看下视频《 8-11 Sentinel与控制台通信原理剖析》 Sentinel Dashboard是用微服务注册到Dashboard上的IP+端口主动请求微服务的。因此,可以微服务绑定一个公网IP,并将公网IP注册到Sentinel Dashboard;或者将Sentinel Dashboard和微服务部署在同一局域网内。 ​
2020-03-17
共2条回复

慕村9469909

提问者

2020-03-16

//img.mukewang.com/szimg/5e6f54da08da784215011502.jpg
具体的配置

0
0

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3054 学习 · 1322 问题

查看课程