帮助文档

eureka-node-client 帮助文档

eureka-node-client 客户端和 eureka 服务器端通信示意图:

示意图

eureka-node-client 是对 eureka-js-client 做的封装,是对 Eureka 客户端的 JS 实现。

  1. 安装 eureka-node-client:

    npm install eureka-node-client --save
    
  2. 将 eureka-node-client 集成到项目中

    const os = require('os');
    
    let hostname = os.hostname();
    let port = 3000;
    
    let eureka_address = process.env.EUREKA_ADDRESS || 'localhost';
    let eureka_port = process.env.EUREKA_PORT || '8761';
    let eureka_username = process.env.EUREKA_USERNAME || 'admin';
    let eureka_password = process.env.EUREKA_PWD || 'admin';
    const eureka_client = new Eureka({
    eureka: {
        host: `${eureka_username}:${eureka_password}@${eureka_address}`,
        port: eureka_port,
        servicePath: "/eureka/apps/"
    },
    instance: {
        app: project_info.name,
        port: { '$': port, '@enabled': 'true' },
        homePageUrl: `http://${hostname}:${port}/`,
        healthCheckUrl: `http://${hostname}:${port}/health`,
        statusPageUrl: `http://${hostname}:${port}/static/index.html`,
        metadata: {
            zone: 'primary',
            env: process.env.NODE_ENV,
            version: project_info.version
            }
        }
    });
    
    /**
     * 设置日志级别
     */
    eureka_client.logger.level('debug');
    
    //********************  测试监听  ********************//
    let updatedListener = function(apps){
        console.log("更新:" + JSON.stringify(apps));
    }
    eureka_client.onUpdated(updatedListener);
    eureka_client.start(function(error){
        console.log(error || '启动成功!');
    });
    

    eureka 客户端需要一个 JSON 格式的配置信息进行初始化,配置信息分为两部分: eureka 和 instance;
    eureka 部分用来配置 eureka 服务器信息,可以指定一个服务器,也可以指定服务器列表。
    指定一个服务器:

    eureka: {
        host: `${eureka_username}:${eureka_password}@${eureka_address}`,
        port: eureka_port,
        servicePath: "/eureka/apps/"
    }
    

    指定服务器列表:

    eureka: {
    "serviceUrls": {
            "default": [
                "http://admin:admin@192.168.2.184:8761/eureka/apps/", 
                "http://admin:admin@192.168.1.107:8761/eureka/apps/", 
                "http://admin:admin@192.168.2.157:8761/eureka/apps/"
                ]
        }
    }
    

    URL中的 admin:admin 是指 eureka 服务器的账号和密码。

    instance 部分指定了服务的信息:

    字段 含义 备注
    app 服务名称 $1
    hostName 服务主机名 $1
    port 端口号 $1
    homePageUrl 主页地址 $1
    healthCheckUrl 健康检查地址 $1
    statusPageUrl 状态地址 $1
    metadata 服务的更多信息 $1

    更多参数参考:eurka-js-client

    设置服务更新的监听,服务发生变化时可以通过监听得知

    let updatedListener = function(apps){
        console.log("服务更新:" + JSON.stringify(apps));
    }
    eureka_client.onUpdated(updatedListener);
    

    解除服务更新的监听

    eureka_client.unbindUpdatedListener(updatedListener)
    

    启动 eureka 客户端服务注册和心跳

    eureka_client.start(function(error){
        console.log(error || '启动成功!');
    });
    

    停止 eureka 客户端并取消服务注册

    eureka_client.start.stop();
    

swagger ui 集成帮助文档

介绍

swagger ui 是一个 API 在线文档生成和测试的利器。支持 API 自动生成同步的在线文档,这些文档可以用于项目内部 API 审核,方便测试人员了解 API。

搭建环境

  1. 下载 swagger ui

    git clone https://github.com/swagger-api/swagger-ui.git
    
  2. 准备一个 NodeJS 项目,本文档用 express 演示。在项目中创建 public 目录,然后将下载好的 swagger ui 的 dist 目录下的文件全部复制到 public 目录下面。完整的目录结构如下:

![目录结构](http://upload-images.jianshu.io/upload_images/732352-df96dc9cabc19efa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 编写代码

    let app = express();
    app.use('/static', express.static('public'));
    

编写文档并发布

  1. 使用swagger editor 编写 API 文档,swagger editor 基于 yaml 语法,需要看一下官方的 demo 学习一下。同样,swagger editor 也提供了 Docker 镜像,可以在本地搭建一个 swagger editor。
    运行下面的命令在你本地运行编辑器:

    docker pull swaggerapi/swagger-editor
    docker run -p 8080:8080 swaggerapi/swagger-editor
    

    然后访问 http://127.0.0.1:8080/

  2. 导出 JSON

image.png
  1. 将导出的 JSON 文件放入项目的 public 目录下面,并修改 public/index.html,如下;

    ```javascript
    <script>
    window.onload = function() {
      
      // Build a system
      const ui = SwaggerUIBundle({
        url: "http://localhost:3000/static/users.json",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      })
    
      window.ui = ui
    }
    </script>
    ``` 
    
    将 url 指向刚才生成的 json 文件
    
    ```javascript
     url: "http://localhost:3000/static/users.json",
    ```
    
  2. 启动 node 服务,浏览器中打开 http://localhost:3000/static/index.html 就是你自己写的 api 文档了。

微服务打包镜像帮助文档

使用 Dockerfile 打包镜像,文件内容如下:

FROM node:latest
MAINTAINER thomas hanxuepeng001@163.com
RUN git clone https://github.com/arthas001/eureka-client-example.git
WORKDIR /micro-service-test

RUN npm i

EXPOSE 3000

CMD npm start

运行命令:

docker build -t hanxuepeng/micro-service .

命令执行完毕后即可生成名为 hanxuepeng/micro-service 的镜像。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 在java编写代码过程中,经常遇到编译器没有提示错误,而控制台提示异常报错,对于初学者来说面对一串串英文的错误信息...
    zengsiyong阅读 1,192评论 0 1
  • 当创建一个服务接口,最好配套的创建一个接口帮助说明,这样的话,客户端调用接口时就会一目了然,知道接口如何调用。这个...
    凌雲木阅读 604评论 0 3
  • 随着项目用户群的扩大,项目国际化的问题就变的重要起来,下面来看一看如何实现内容和app名字的字符串国际化。 1.内...
    知县有点小心事儿阅读 2,800评论 1 9
  • 刘 水 萍 四月的暖风吹绿了草木,绿意蔓延成一幅绸缎;吹艳了春花,花色渲染出一片斑斓,而我的眼前总是或近或远摇...
    知道了不用记阅读 1,559评论 12 20