出于某种原因,我在亚马逊上注册 Eureka 时得到了 400 的退款。起初我认为它与 eureka js 客户端的已知问题有关,但是,在应用该问题的修复程序后,它在本地工作,但当数据中心对象是 Amazon 时就不行了。它似乎从亚马逊获取元数据,使用本地将其应用于 eureka-js-client 配置对象,然后发出 POST 请求,但它似乎以 400 状态响应。
这是我的配置对象:
instance: {
app: 'my-node-service',
port: {
'$': 8201,
'@enabled': true
},
vipAddress: 'myapp.awesome.com',
statusPageUrl: 'http://__HOST__:8201/info',
dataCenterInfo: {
'@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
name: 'Amazon',
}
},
eureka: {
useLocalMetadata: true,
ssl: true,
// eureka server host / port
serviceUrls: {
default: [
'https://myamazoneurekaserver.com/eureka/apps',
'https://myamazoneurekaserver1.com/eureka/apps',
'https://myamazoneurekaserver2.com/eureka/apps'
]
},
servicePath: '/eureka/apps/'
},
}
这会导致来自 EurekaClient.js 文件的输出:
错误:eureka 注册失败:状态:400 主体:[object Object]
在/usr/app/node_modules/eureka-js-client/lib/EurekaClient.js:267:23
在 Request.self.callback (/usr/app/node_modules/request/request.js:186:22)
在/usr/app/node_modules/async/dist/async.js:484:16
在 nextTask (/usr/app/node_modules/async/dist/async.js:5195:29)
在/usr/app/node_modules/async/dist/async.js:5202:13
在申请时(/usr/app/node_modules/async/dist/async.js:41:25)
在/usr/app/node_modules/async/dist/async.js:76:12
在/usr/app/node_modules/async/dist/async.js:988:16
在 Request._callback (/usr/app/node_modules/eureka-js-client/lib/EurekaClient.js:570:9)
在/usr/app/node_modules/eureka-js-client/lib/EurekaClient.js:592:7
发生这种情况的任何原因。使用 Amazon
的示例不使用默认服务 Urls,但是当我使用 MyOwn
作为 dataCenterInfo
名称时,这在本地有效。
最佳答案
在 GitHub issue 中回答了这个问题也,但是为了后代把它放在这里=)。
对于 Amazon 数据中心(以及较新的 eureka JSON 格式),我认为您需要为 @class
传递不同的值。尝试使用:com.netflix.appinfo.AmazonInfo
。
如果您仍然收到错误的请求,有时手动向服务发出请求会有所帮助(因为这就是该客户端所做的一切),如果您有 Postman 或类似工具,那会起作用。您还可以设置 NODE_DEBUG=request
以查看客户端请求级别发生的情况。
关于javascript - 400 来自亚马逊的 Eureka js 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425787/