SpringCloud gateway 路由转发 503 错误踩坑

使用gateway 做转发, 其中配置为:

server:
  port: 8891

spring:
  application:
    name: gateway-service

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.103:8848
        namespace: e48247ce-b5a3-4fb5-b25c-409b3a015dbd
    gateway:
      discovery:
        locator:
          enable: true # gateway 可以从 nacos 发现微服务
          lower-case-service-id: true
      routes:
        - id: nacos-conf   #路由id, 唯一
          uri: lb://nacos-conf  # lb 表示从 nacos 中按照名称获取微服务,并遵循负载均衡的策略,nacos_config 对应微服务应用名
          predicates:
            - Path=/** #使用断言

结果报错:

type=Service Unavailable, status=503。

把 uri 改为  http://localhost:8890 后就可以使用, 一番查询后才找到原因。 需要在 gateway 的 pom 内 添加:

<!--客户端负载均衡loadbalancer-->
<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

原因:

由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。

所以只需要引入springcloud loadbalancer包即可。

 

 

之前微服务之间用 template 来通过 服务名 进行调用的时候也出现过这个问题, 当时也是这样解决了, 但是这次遇到没有联想到这个问题。

 

参考:https://blog.csdn.net/little_stick_i/article/details/124844363

posted @ 2022-11-02 14:50  长弓射大狗  阅读(798)  评论(0编辑  收藏  举报