[进阶篇]nodejs服务使用随机端口注册eureka
eureka的优点我就不多说了,这里只谈谈nodejs如何注册到eureka中。nodejs注册到eureka中可以用eureka-client模块实现,代码如下,从promise中截取仅关键部分,应该足够了。let Eureka = require('eureka-client').Eureka;let client = new Eureka({instance: {...
·
eureka的优点我就不多说了,这里只谈谈nodejs如何注册到eureka中。
nodejs注册到eureka中可以用eureka-client模块实现,代码如下,从promise中截取仅关键部分,应该足够了。
let Eureka = require('eureka-client').Eureka;
let client = new Eureka({
instance: {
app: 'xxx',//注册本服务名称
appGroupName: 'group_xxx',//注册本服务分组(不是必须的)
instanceId: require('uuid').v1(),//注册本服务实例编号,此处可随机生成一个
hostName: ip,//本服务IP地址
ipAddr: ip,//本服务IP地址
statusPageUrl: `http://${ip}:${port}`,//本服务IP地址和端口号
healthCheckUrl: `http://${ip}:${port}/health`,//本服务IP地址和端口号
port: {
'$': port,//服务端口号
'@enabled': 'true',
},
vipAddress: 'xxx',//注册应用名称
dataCenterInfo: {
'@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
name: 'MyOwn',
},
},
eureka: {
serviceUrl: eurekaUrl,//eureka的地址
},
});
client.start(function(error) {
if(error){
eurekaUrl = null;
console.log('注册Eureka失败');
reject(error)
}else{
console.log('服务已成功注册Eureka');
resolve()
}
});
端口号随机生成可以使用下面的方式,代码也是用promise中截取关键部分
let server = require('http').createServer();
server.listen(0);
let sockets = [];
server.on("connection",function(socket){
sockets.push(socket);
socket.once("close",function(){
sockets.splice(sockets.indexOf(socket),1);
});
});
return new Promise((resolve, reject) => {
//关闭之前,我们需要手动清理连接池中的socket对象
function closeServer(){
sockets.forEach(function(socket){
socket.destroy();
});
server.close(function(){
console.log("close server! port = " + port);
resolve()
});
}
server.on('listening', function(err) {
if(err){
reject(err)
}else{
port = server.address().port;
closeServer();
}
})
})
附:获取ip地址可以使用如下方式
let _getIPAdress = () => {
let interfaces = require('os').networkInterfaces();
let ipAddress = null;
_.forEach(interfaces, (oneInterface, devName) => {
_.forEach(oneInterface, (alias) => {
if(alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal){
ipAddress = alias.address;
return false
}
});
return !ipAddress
});
return ipAddress;
};
以上关键代码已有,只需要组合到promise中就可以玩出各种花样来
更多推荐
已为社区贡献1条内容
所有评论(0)