当前位置: 首页 > 知识库问答 >
问题:

无法通过Spring Cloud Gateway Eureka访问NodeJS微服务

戈巴英
2023-03-14

我在后端使用微服务架构,其中我使用TypeScript创建服务,其他使用Java创建服务。我还有一个Spring网关和一个Eureka服务器(都使用Spring)。

然后,Gateway工作正常,Eureka工作正常,用Java编写的其他微服务也工作正常。问题是当我试图通过网关访问TypeScript微服务时。

我有一个简单的Eureka服务器,在Spring使用注释EnableEurekaServer。

也是连接到Eureka作为客户端的网关,其中yaml具有以下部分:

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
        - id: ms1
          uri: lb://ms1
          predicates:
            - Path=/ms1/**
        - id: ms2
          uri: lb://ms2
          predicates:
            - Path=/ms2/**

有了这个网关,我希望有两条路由/ms1/ms2来访问微服务1(用TS编写)或微服务2(用Java编写)。

您可以看到网关ms1ms2。但是,为什么Java服务有192.168.8.121而TS服务没有?

顺便说一句,链接工作正常,每个服务都路由到存在的端口,网关和Java微服务路由到<代码>

MicroService 2非常简单:

@RestController
public class Controller {
    @GetMapping("/hello-world")
    public ResponseEntity<String> getHi() {
        return ResponseEntity.ok("hi");
    }
}

也进入application.yml:

spring:
  application:
    name: ms2

但TS microservice使用eureka js客户端进行以下配置:

this._client = new Eureka({
                instance: {
                    app: 'ms1',
                    instanceId: 'ms1',
                    hostName: 'localhost',
                    ipAddr: '127.0.0.1',
                    statusPageUrl: `http://localhost:8081`,
                    healthCheckUrl: `http://localhost:8081/health`,
                    port: {
                        '$': 8081,
                        '@enabled': true,
                    },
                    vipAddress: 'myvip',
                    dataCenterInfo: {
                        '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
                        name: 'MyOwn',
                    },
                },
                eureka: {
                    host: 'localhost',
                    port: 8761,
                    servicePath: '/eureka/apps/'
                },
            })

所以,我的想法是:

  • 当我点击

第二个很好,但是路线http://192.168.8.121:8762/ms1/hello-world返回503错误:

Whitelabel Error Page

This application has no configured error view, so you are seeing this as a fallback.
Mon May 16 19:02:56 CEST 2022
[fa1d8857-5] There was an unexpected error (type=Service Unavailable, status=503).

控制台显示没有可供服务的服务器:ms1。

所以我不知道我是否误解了什么,来自eureka-js-client的名称是ms1。LB是该服务的...但它不起作用。

正如我所说,使用Java服务可以很好地工作,所以问题可能是服务连接到Eureka的方式,谁使用的名称或类似的东西?但在仪表板中,它显示为MS1和MS2,所以我很困惑。。。

提前感谢


共有1个答案

葛景龙
2023-03-14

解决了我的问题,这是一件奇怪的事情。

我的vipAddress不正确。似乎Spring Cloud Gateway检查instance.vip地址而不是instance.app

因此,将myvip替换为ms1非常有效。

 类似资料:
  • 我们有一个WSO2 ESB代理服务,可以通过它的httpsendpoint访问。我想配置这个服务,使它也可以通过HTTP访问。我检查了carbon management控制台中的服务配置,并确认https和httpendpoint都已启用: 此外,ESB_HOME}/repository/conf/axis2/中的axis2.xml文件似乎配置得很好。 编辑:下面是代理服务配置和netstat结果

  • 我有一个G套件域,并用域范围的授权打开一个服务号。服务号在项目中也有所有者身份。我启用gmail应用编程接口并添加范围参考(https://developers.google.com/admin-sdk/directory/v1/guides/delegation“将域范围的权限委托给您的服务号”)我也启用不太安全的应用程序设置。 这是我的代码: 但是当我使用这个令牌尝试列出电子邮件时:GETht

  • 什么起作用了? 使用Helm(启用RBAC)部署入口控制器 集群IP服务部署 什么不起作用? null K8S入口 注释中最后应用的配置(入口描述输出)显示入口资源清单。但是,我贴在下面作为参考 附加信息 null 任何关于我可能做错了什么的建议或见解将非常感谢。

  • 问题内容: 最初一切正常,我有一个类似的组件。这个 在其他档案中 到这里为止一切正常,但是当我在 它不起作用。我已经从react-redux导入了connect 问题答案: 接受为第四参数。在此选项参数中,您可以将flag设置为true。之后,您可以使用like 来访问ref的函数

  • 问题内容: 我在Mac OS X上使用自制软件设置了jenkins,它 可以通过主机正常工作,或者无法通过主机名/ ipaddress访问jenkins实例: 即使从本地计算机(詹金斯主机本身)也无法访问这两个链接。同时执行命令并正常工作。 问题答案: 事实证明,启动代理配置为仅侦听127.0.0.1(或localhost)。要修复该詹金斯经纪人的plist: 并修改为而不是

  • 我使用此处的说明在 VirtualBox 上创建了一个 3 节点 kubernetes 集群(1 个主 2 个工作线程)。我正在使用法兰绒作为覆盖网络。 我在安装过程中在主服务器上设置了< code > sysctl-w net . bridge . bridge-nf-call-iptables = 1 和< code > sysctl-w net . bridge . bridge-nf-ca