heroku eureka-js-client node- Spring Cloud Netflix支持 -

时间:2017-07-23 20:06:57

标签: node.js heroku spring-cloud netflix-eureka

我想要实现的目标是:

  • 在heroku的eureka-server中注册node.js服务。

    到目前为止,我可以在heroku的eureka-server中注册一个普通的eureka-client,没有任何问题。但是在尝试使用node.js服务时,我对配置感到非常困惑......

    我认为eureka-js-client是解决方案,到目前为止没有成功......

    以下代码。

    const express = require('express');
    const path = require('path');
    const port = process.env.PORT || 3090;
    const app = express();
    app.use(express.static(__dirname));
    const bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({extended: false}));
    app.use(bodyParser.json());
    
    app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'index.html'))
    });
    
    const Eureka = require('eureka-js-client').Eureka;
    
    const eureka = new Eureka({
    instance: {
    app: 'sheila',
    hostName: 'localhost',
    ipAddr: '127.0.0.1',
    statusPageUrl: 'http://localhost:5000',
    healthCheckUrl: 'http://localhost:5000/health',
    port: {
    '$': 5000,
    '@enabled': 'true',
    },
    vipAddress: 'myvip',
    dataCenterInfo: {
    '@Class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
    name: 'MyOwn',
    },
    },
    eureka: {
    host: 'localhost',
    port: 8761,
    servicePath: '/eureka/apps/',
    },
    });
    eureka.logger.level('debug');
    eureka.start(function(error){
    console.log(error || 'complete');
    });
    
    // ------------------ Server Config --------------------------------------------
    var server = app.listen(5000, function () {
    var port = server.address().port;
    console.log('Listening at %s', port);
    });
    

首先,我在Docker控制台上运行docker run -it -p 8761:8761 springcloud/eureka后尝试本地操作。但是我得到了这个错误:

Problem making eureka request { [Error: connect ECONNREFUSED 127.0.0.1:8761]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 8761 }

如果我从heroku服务运行它,它不会执行:( :(

我也试过用主机代替我的heroku eureka服务器的url,但后来我得到401或404错误。 eureka服务器需要我在heroku客户端js中添加的密码。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要包含一个instanceId,它应该是此实例的唯一标识符。

const eureka = new Eureka({
  instance: {
    instanceId:'sheila',
    app: 'sheila',
    hostName: 'localhost',
    ipAddr: '127.0.0.1',
    statusPageUrl: 'http://localhost:5000',
    healthCheckUrl: 'http://localhost:5000/health',
    port: {
      '$': 5000,
      '@enabled': 'true',
    },
    vipAddress: 'myvip',
    dataCenterInfo: {
      '@Class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
      name: 'MyOwn',
    },
  },
  eureka: {
    host: 'localhost',
    port: 8761,
    servicePath: '/eureka/apps/',
  },
});