2.1.7 • Published 2 years ago

jm-server v2.1.7

Weekly downloads
25
License
MIT
Repository
github
Last release
2 years ago

微服务器 jm-server

micro server using jm-ms

why

  • 微服务架构把传统单体应用拆分为多个小应用

  • 应用一般会包含配置、通讯、日志和一些公共服务,每个小应用都重复去实现这些部分没有必要,也不利于以后的维护和扩展。

目标

  • 作为一个微服务器框架,帮助开发者把精力集中在服务及路由的开发,而不必关注底层的实现。
  • 采用模块化设计,开发者可以把多个微服务集中在一个单体应用中部署,从而兼容传统的软件开发模式。可合可分,非常灵活。

features

  • 模块化设计

  • 路由式编程模式 基于 jm-ms

  • 支持多协议 http、ws

  • 支持代理转发 proxy

install

npm i -g jm-server

use:

// 控制台启动
jm-server -h
// or
jms -h

// 代码中启动
require('jm-server/bin/app')

工作原理

  • 读取配置文件中的模块配置 modules

  • 逐一加载模块

模块化

  • 开发者的任务是开发和配置模块
  • 模块分为两种:标准模块和代理模块

标准模块

  • 标准模块包含两个基本部分,服务和路由,路由是可选的
  • 服务器加载模块时,如果模块中包含 router 函数,自动启用路由,即约定式路由

模块例子,无路由

module.exports = function(opts) {
    const service = {
        version: '1.0.0',

        hello: function() {
            return 'hello'
        }
    }
    return service
}

模块例子,有路由

const MS = require('jm-ms-core');
const ms = new MS();

// 定义router
const router = function () {
    var service = this; // 这里通过this可以获得service示例
    var router = ms.router()

    // 定义一条路由
    router.add('/help', 'get', opts => {
        return {
            version: service.version,
            hello: service.hello()
        }
    })

    return router
}

module.exports = function(opts) {
    const service = {
        version: '1.0.0',

        hello: function() {
            return 'hello'
        }
    }

    //router 可选
    service.router = router

    return service
}

标准模块配置

{
    key: {
        prefix: '前缀', // 可选,如果不配置,默认用 '/key'
        module: 'jm-ms-message', // 模块名或者模块路径
        jsonpath: '$.a.b', // 可选,以jm-ms-message.a.b作为实际模块,用于模块库里有多个模块时指定其中一个模块
        config: {}
    }
}

代理模块

  • 把来自客户端的请求转发给其他服务器处理,再把结果返回客户端
  • proxy 路由转发,只支持 application/json
  • httpProxy 直接转发,没有限制

proxy 配置

  • 优点:基于 jm-ms, 支持路由过滤
  • 缺点:只支持 application/json
{
    key: {
      prefix: '前缀',
      proxy: 'http://localhost/config' // 路由转发
    }
}

httpProxy 配置

作为 proxy 的补充,无法用 proxy 实现时才使用

{
    key: {
      prefix: '前缀',
      changeOrigin: false, // 是否跨域
      httpProxy: 'http://localhost', // 直接转发
    }

}

配置

配置参数支持2种方式。

  • 通过配置文件 config/index.js。
  • 通过环境变量,主要是为了方便Docker化部署。

主要配置项

配置项默认值描述
debugfalse是否打开调试模式
port3000监听端口
host'0.0.0.0'监听的IP地址
prefixUri前缀
trust_proxyfalse是否传递IP地址
lng语言
max_body_size'100kb'设置允许请求的body的大小, 例如 '5mb'

其他配置项

maxcpus 只支持环境变量设置, 默认全部

配置项默认值描述
maxcpuscluster模式cpu数量
no_auto_initfalse是否禁止自动初始化,
no_auto_openfalse是否禁止自动监听

配置例子

config/index.js

module.exports = {
  port: 80, // 端口
  // ....
  modules: { // 模块配置
    '': { // key, 模块唯一标识
      module: 'jm-ms-message', // 模块名或者模块路径
      prefix: uri_prefix // 默认为key
      config: {}  // 可选, 模块配置, 默认采用全局配置
    },
    config: {
      module: process.cwd() + '/lib' // 模块路径
    },
    oms: {
      proxy: 'http://localhost/oms' // 路由转发
    },
    pay: {
      httpProxy: 'http://localhost', // 直接转发, 注意实际请求地址为 http://localhos/pay
      prefix: '/pay'
    }
  }
}
2.1.7

2 years ago

2.1.6

4 years ago

2.1.5

4 years ago

2.1.4

4 years ago

2.1.4-beta

4 years ago

2.1.3

4 years ago

2.1.3-beta.2

4 years ago

2.1.3-beta.1

4 years ago

2.1.3-beta

4 years ago

2.1.2

4 years ago

2.1.2-beta

4 years ago

2.1.1

4 years ago

2.1.1-beta.1

4 years ago

2.1.1-beta

4 years ago

2.1.0

4 years ago

2.1.0-beta.4

4 years ago

2.1.0-beta.3

4 years ago

2.1.0-beta.2

4 years ago

2.1.0-beta.1

4 years ago

2.1.0-beta

4 years ago

2.0.9

5 years ago

2.0.8

5 years ago

2.0.7-1

5 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

1.1.1

6 years ago

2.0.4

6 years ago

2.0.3

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

1.1.0

6 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago

0.1.8

7 years ago

0.1.7

7 years ago

0.1.6

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.13

7 years ago

0.0.12

7 years ago

0.0.11

7 years ago

0.0.10

7 years ago

0.0.9

7 years ago

0.0.8

7 years ago

0.0.7

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago