倒过来念的是猪 2021-06-02 23:11 采纳率: 100%
浏览 2725
已采纳

nacos + gateway 在配置 lb://服务名,时无效报503,求各位大佬帮帮忙。。。

<springboot.version>2.2.9.RELEASE</springboot.version>
<springcloud.version>Hoxton.SR8</springcloud.version>
<springcloud-alibaba.version>2.2.1.RELEASE</springcloud-alibaba.version>

bootstrap.yml

spring:
  application:
    name: mall-gateway
  cloud:
    nacos:
      config:
        # 配置中心地址
        # server-addr: http://***********:8848
        # 配置nginx地址
        server-addr: http://xxxxxxxxxx:1122
        # 指定yaml格式的配置
        file-extension: yaml
        # config分组
        group: dev
        # config命名空间
        namespace: 8067255f-1a91-4cd3-be6c-c132a4c2d5a6
        # 加载config中的其它配置
        extension-configs[0]:
          data-id: application-gateway.yml
          group: dev
          refresh: true
        extension-configs[1]:
          data-id: gateway-router.yml
          group: dev
          refresh: true

 application-gateway.yml

server:
  port: 88

spring:
  cloud:
    nacos:
      discovery:  #  启动类加 @EnableDiscoveryClient  开启服务的注册与发现
        # 配置Nacos地址
        # server-addr: http://**********:8848/
        # 配置nginx地址
        server-addr: http://xxxxxxxxxx:1122/
        # 服务分组
        group: dev
        # 服务命名空间
        namespace: 8067255f-1a91-4cd3-be6c-c132a4c2d5a6


# 配置这一项可以监控gateway各个节点的信息
management:
  endpoints:
    web:
      exposure:
        include: "*"

gateway-router.yml

spring:
  cloud:
    gateway:
      discovery:
        locator:
          # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
          enabled: true
          lowerCaseServiceId: true
      # 添加路由配置
      routes:
        # 使用lb 就有问题
        - id: admin_route
          uri: lb://mall-admin
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*), /mall-admin/$\{segment}
        
        # 这样配置是没问题的
        - id: admin_test
          uri: http://localhost:8080
          predicates:
            - Path=/test/**
          filters:
            - RewritePath=/test/(?<segment>.*), /mall-admin/$\{segment}

请问为什么只要使用  uri: lb://服务名   这种就没有用,报503 。使用 ri: http://localhost:8080    这样就可以。

项目github地址:git@github.com:suiweidong/mall.git

麻烦各位大佬了

  • 写回答

3条回答 默认 最新

  • 倒过来念的是猪 2021-06-03 11:49
    关注

    已经找到问题所在了,问题不是出现在代码上,是出现在nacos的配置上。

    原来是给每一个服务配置了一个命名空间,然后对应服务的配置,放在对应的命名空间中,这样看着很简洁干净,这样其实也是没问题的。

    问题出现在注册服务的时候,我把每一个服务放在它们对应的命名空间中了,如图:

    spring:
      cloud:
        nacos:
          discovery:  #  启动类加 @EnableDiscoveryClient  开启服务的注册与发现
            # 配置Nacos地址
            # server-addr: http://**********:8848/
            # 配置nginx地址
            server-addr: http://xxxxxxxxxx:1122/
            # 服务分组
            group: dev
            # 服务命名空间
            namespace: 8067255f-1a91-4cd3-be6c-c132a4c2d5a6

    nacos不支持不同命名空间之间的调用,导致我在gateway服务中,lb://admin  获取不到admin服务,结果报了503。

    改进后就没问题了

    我使用命名空间做环境隔离,使用group 做应用隔离

    对应的服务注册的命名空间都改成 dev对应的命名空间,去掉group ,这样所有的服务注册都会在dev命名空间下,互相调用就是可以调通的

    spring:
      cloud:
        nacos:
          discovery:  #  启动类加 @EnableDiscoveryClient  开启服务的注册与发现
            # 配置Nacos地址
            # server-addr: http://**********:8848/
            # 配置nginx地址
            server-addr: http://xxxxxxxxxx:1122/
            # 服务命名空间
            namespace: 50b719ee-29c4-41d5-8139-962971609d5b

    每个项目中的bootstrap.yml 也要对应改一下

    spring:
      cloud:
        nacos:
          config:
            # 配置中心地址
            # server-addr: http://*********:8848
            # 配置nginx地址
            server-addr: http://xxxxxxxxxxx:1122
            # 指定yaml格式的配置
            file-extension: yaml
            # config分组
            group: gateway
            # config命名空间
            namespace: 50b719ee-29c4-41d5-8139-962971609d5b
            # 加载config中的其它配置
            extension-configs[0]:
              data-id: application-gateway.yml
              group: gateway
              refresh: true
            extension-configs[1]:
              data-id: gateway-router.yml
              group: gateway
              refresh: true

    这个问题纠结了我2天。。。自己水平不足,不过这种学习过程,还是很快乐的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • mind_code 2021-08-20 09:16
    关注

    我也遇到了这个问题,感谢作者的思路,我的是注册中心中的namespace一样,但是group不一样,然后死活调用不了,去了group全部选用默认命名可以了。

    评论
  • 济南彭于晏 2021-11-17 23:08
    关注

    感谢作者,纠结了一晚上 终于可以了 睡觉去了 美滋滋

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 我用C语言easyx图形库绘制了一个3d游戏方框透视,但进入游戏时候鼠标准星对准方框边缘 鼠标光标就会弹出来这是啥情况怎样让光标对准绘制的方框点击鼠标不弹出光标好烦这样
  • ¥20 用Power Query整合的问题
  • ¥20 基于python进行多背包问题的多值编码
  • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
  • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
  • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
  • ¥15 C语言:数据子序列基础版
  • ¥20 powerbulider 导入excel文件,显示不完整
  • ¥15 用keil调试程序保证结果进行led相关闪烁
  • ¥15 paddle训练自己的数据loss降不下去