帮酷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  |  如果智培  |  酷兔英语