帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:IMP  Https  HTTP  Implementation  
JS implementation of a client for Eureka (https://github.com/Netflix/eureka), the Netflix OSS service registry.

  • 源代码名称:eureka-js-client
  • 源代码网址:http://www.github.com/jquatier/eureka-js-client
  • eureka-js-client源代码文档
  • eureka-js-client源代码下载
  • Git URL:
    git://www.github.com/jquatier/eureka-js-client.git
  • Git Clone代码到本地:
    git clone http://www.github.com/jquatier/eureka-js-client
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/jquatier/eureka-js-client
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • eureka-js-client

    npm versionBuild StatusCoverage StatusDependency StatusbitHound Overall Score

    Eureka ( https://github.com/Netflix/eureka ) 客户端的JavaScript实现,Netflix 操作系统 服务注册表。

    用法

    首先,将 MODULE 安装到 node 项目中:

    npm install eureka-js-client --save

    将尤里卡客户端添加到 node 应用程序。

    尤里卡 MODULE 导出了一个可以构造的JavaScript函数。

    importEurekafrom'eureka-js-client';// Or, if you're not using a transpiler:constEureka=require('eureka-js-client').Eureka;// example configurationconstclient=newEureka({
     // application instance information instance: {
     app:'jqservice',
     hostName:'localhost',
     ipAddr:'127.0.0.1',
     port:8080,
     vipAddress:'jq.test.something.com',
     dataCenterInfo: {
     name:'MyOwn',
     },
     },
     eureka: {
     // eureka server host/port host:'192.168.99.100',
     port:32768,
     },
    });

    尤里卡客户端在当前工作目录中搜索YAML文件 eureka-client.yml 。 它进一步搜索环境特定的YAML文件中的环境特定替代( 比如 。 eureka-client-test.yml ) 。环境通常是 development 或者 production,并由 NODE_ENV 环境变量决定。 传递给构造函数的选项覆盖配置文件中设置的任何值。

    在传递给 Eureka 构造函数的对象中指定 cwd 选项,你可以配置自定义目录来加载配置文件。

    constclient=newEureka({
     cwd:`${__dirname}/config`,
    });

    如果愿意,还可以覆盖使用 filename 属性加载的文件的NAME 。 你可以混合使用 cwdfilename 选项。

    constclient=newEureka({
     filename:'eureka',
     cwd:`${__dirname}/config`,
    });

    带有尤里卡&启动应用程序心跳的 register

    client.start();

    带有尤里卡&停止应用心跳的寄存器

    client.stop();

    通过 APP ID 获取实例

    constinstances=client.getInstancesByAppId('YOURSERVICE');

    通过Vip地址获取实例

    constinstances=client.getInstancesByVipAddress('YOURSERVICEVIP');

    提供定制请求中间件

    客户端暴露了在尤里卡调用之前修改传出请求选项对象的能力。 这在添加诸如OAuth之类的认证方法或者其他自定义头时很有用。 这将在每个尤里卡请求上调用,因此强烈建议在中间件中进行的任何长期的外部调用都是缓存或者 memoized 。 如果中间件返回对象以外的任何东西,尤里卡请求将立即失败,并在配置后执行重试。

    // example using middleware to set-up HTTP authenticationconstclient=newEureka({
     requestMiddleware: (requestOpts, done) => {
     requestOpts.auth= {
     user:'username',
     password:'somepassword' };
     done(requestOpts);
     }
    });

    为AWS环境配置

    对于AWS环境,客户机构建了逻辑来请求AWS元数据,这是尤里卡服务器需要的。 有关更多信息,请参见尤里卡REST架构插件。

    // example configuration for AWSconstclient=newEureka({
     // application instance information instance: {
     app:'jqservice',
     port:8080,
     vipAddress:'jq.test.something.com',
     statusPageUrl:'http://__HOST__:8080/info',
     healthCheckUrl:'http://__HOST__:8077/healthcheck',
     homePageUrl:'http://__HOST__:8080/',
     dataCenterInfo: {
     name:'Amazon',
     },
     },
     eureka: {
     // eureka server host/port/EC2 region host:'eureka.test.mydomain.com',
     port:80,
     },
    });

    注释:

    • 在此配置下,实例 hostNameipAddr 将被设置为AWS元数据提供的public 主机和 public IP 。 你可以将 eureka.useLocalMetadata 设置为 true,以使用 private 主机和 private IP地址。
    • 如果要使用 register 地址作为主机名,请将 eureka.preferIpAddress 设置为 true 。 这可以与 eureka.useLocalMetadata 一起用于选择 private 或者 public IP 。
    • For的状态和 healthcheck url,你可以使用 __HOST__的替换键从元数据中使用主机。
    • 如果希望在AWS环境中提供自己的元数据,可以通过将 config.eureka.fetchMetadata 设置为 false 来禁用元数据提取。

    使用DNS查找尤里卡服务器

    如果你在EC2项目中设置了多个可用性区域,并且你的DNS项目根据Wiki部署 Eureka-Servers,你将希望设置 config.eureka.useDnstrue 并将 config.eureka.ec2Region 设置为当前区域。

    这将导致客户端使用 config.eureka.hostconfig.eureka.ec2Region 执行DNS查找。 在Wiki文章 above 中还描述了这里函数所需的DNS TXT记录的命名约定。 只要DNS记录符合相同的约定,这个特性也可以在non-EC2环境中工作。 DNS解析的结果缓存在内存中,每 5分钟刷新一次( 设置 config.eureka.clusterRefreshInterval 要覆盖) 。

    非全局区域关联

    默认情况下,客户端首先尝试连接到位于同一可以用区域中的is服务器。 如果在实例元数据中没有设置 availability-zone,将选择一个随机服务器。 在静态配置群集( 按区域映射,请参见下面) 时也适用这里。 要禁用这里功能,将 config.eureka.preferSameZone 设置为 false,并选择一个随机服务器。

    静态配置尤里卡服务器列表

    推荐解决尤里卡集群的方法是使用 DNS,你也可以通过区域或者简单的缺省列表静态配置尤里卡服务器列表。 请确保在使用这里方法时提供了Eureka服务( 通常 /apps/ )的完整协议。主机。端口和路径。

    static 群集配置( 按区域映射)
    // example configuration for AWS (static map of Eureka cluster by availability-zone)constclient=newEureka({
     instance: {
     ...// application instance information },
     eureka: {
     availabilityZones: {
     'us-east-1': ['us-east-1c', 'us-east-1d', 'us-east-1e']
     },
     serviceUrls: {
     'us-east-1c': [
     'http://ec2-fake-552-627-568-165.compute-1.amazonaws.com:7001/eureka/v2/apps/', 'http://ec2-fake-368-101-182-134.compute-1.amazonaws.com:7001/eureka/v2/apps/' ],
     'us-east-1d': [...],
     'us-east-1e': [...]
     }
     },
    });
    static 集群配置( 列表)
    // example configuration (static list of Eureka cluster servers)constclient=newEureka({
     instance: {
     ...// application instance information },
     eureka: {
     serviceUrls: {
     default: [
     'http://ec2-fake-552-627-568-165.compute-1.amazonaws.com:7001/eureka/v2/apps/', 'http://ec2-fake-368-101-182-134.compute-1.amazonaws.com:7001/eureka/v2/apps/' ]
     }
     },
    });

    高级配置选项

    选项默认值说明
    requestMiddlewarenoop定制中间件功能来修改传出请求到尤里卡
    logger控制台日志记录要使用的客户端的记录器实现
    shouldUseDeltafalse从尤里卡获取增量的实验模式,而不是在更新时
    eureka.maxRetries3重新尝试所有请求到尤里卡的次数
    eureka.requestRetryDelay500重试之间等待的毫秒数。 这将乘以失败重试的# 。
    eureka.heartbeatInterval30000心跳之间等待的毫秒数
    eureka.registryFetchInterval30000注册表获取之间等待的毫秒数
    eureka.registerWithEurekatrue启用/禁用尤里卡注册
    eureka.fetchRegistrytrue启用/禁用注册表获取
    eureka.filterUpInstancestrue启用/禁用对状态 === UP的实例筛选
    eureka.servicePath/eureka/v2/apps/尤里卡REST服务的路径
    eureka.sslfalse启用与尤里卡服务器的SSL通信
    eureka.useDnsfalse在使用DNS查找尤里卡服务器时,请参阅使用DNS服务器查找AWS中的尤里卡服务器。
    eureka.preferSameZonetrue在定位尤里卡服务器时启用/禁用区域关联
    eureka.clusterRefreshInterval300000刷新群集主机之间的毫秒数( 仅适用于DNS解析)
    eureka.fetchMetadatatrue在AWS环境中获取AWS元数据时,请参见AWS环境的配置。
    eureka.useLocalMetadatafalseAWS环境中使用元数据时使用本地IP和本地主机名。
    eureka.preferIpAddressfalse使用IP地址( 本地或者 public ) 作为AWS环境中注册的主机名。

    事件

    尤里卡客户端是 EventEmitter的一个实例,提供以下消费事件:

    事件数据提供描述
    startedn/a当尤里卡客户端完全注册并且所有注册都已经更新时激发。
    registeredn/a当尤里卡客户端注册尤里卡时激发。
    deregisteredn/a当尤里卡客户端取消注册尤里卡时激发。
    heartbeatn/a当尤里卡客户成功地续订了尤里卡的租约时激发。
    registryUpdatedn/a当尤里卡客户端成功更新它的注册表时激发。

    命令行调试

    库在所有服务调用中都使用 ,在启动 node 时,通过传递 NODE_DEBUG=request 可以打开调试。 这允许你再次检查被调用的URL以及其他请求属性。

    NODE_DEBUG=request node example.js

    还可以通过将日志级别设置为调试,在库中启用调试:

    client.logger.level('debug');

    已知问题

    来自尤里卡服务器的错误请求错误

    Eureka的版本需要在注册时使用稍微不同的JSON POST体。 如果注册时看到 400错误,可以能是配置问题,它可以能是格式差异 below 。 历史 behind 这还不清楚,这里有一个讨论 主要区别如下:

    • port 现在是一个具有 2个必需字段 $@enabled的对象。
    • dataCenterInfo 具有 @class 属性。

    有关示例,请参见 below:

    constclient=newEureka({
     // application instance information instance: {
     app:'jqservice',
     hostName:'localhost',
     ipAddr:'127.0.0.1',
     port: {
     '$':8080,
     '@enabled':true,
     },
     vipAddress:'jq.test.something.com',
     dataCenterInfo: {
     '@class':'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
     name:'MyOwn',
     },
     },
     eureka: {
     // eureka server host/port host:'192.168.99.100',
     port:32768,
     },
    });

    如果你打算连接AWS中的尤里卡服务,你需要添加相应的dataCenterInfo 信息:

     dataCenterInfo: {
     '@class':'com.netflix.appinfo.AmazonInfo',
     name:'Amazon',
     }

    404没有发现来自尤里卡服务器的错误

    这可能意味着Eureka服务位于你环境中的不同路径上。 默认值为 http://<EUREKA_HOST>/eureka/v2/apps 但是,根据你的设置,你可能需要将 eureka.servicePath 中的设置为其他路径。 REST服务可能挂在 /eureka/apps/ 或者 /apps/ 下。

    与云的使用

    如果你使用 spring 云,你可能需要以下设置:

    下面是一个应该与 spring 云尤里卡服务器一起使用的配置示例:

    constclient=newEureka({
     instance: {
     app:'jqservice',
     hostName:'localhost',
     ipAddr:'127.0.0.1',
     statusPageUrl:'http://localhost:8080/info',
     port: {
     '$':8080,
     '@enabled':'true',
     },
     vipAddress:'jq.test.something.com',
     dataCenterInfo: {
     '@class':'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
     name:'MyOwn',
     },
     },
     eureka: {
     host:'192.168.99.100',
     port:32768,
     servicePath:'/eureka/apps/' },
    });

    测试

    对 MODULE的测试使用 mocha 和chain编写。 若要运行单元测试,可以使用吞咽 test 任务:

    gulp test

    如果要让测试观察 src/test/ 目录进行更改,可以以使用 test:watch 吞吐任务:

    gulp test:watch


    文章标签:IMP  Implementation  HTTP  Https  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语