@midwayjs/consul 3.0.3 → 3.0.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "@midwayjs/consul",
3
3
  "description": "midway consul",
4
- "version": "3.0.3",
4
+ "version": "3.0.4-beta.1",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist/**/*.js",
9
- "dist/**/*.d.ts",
10
- "dist/**/*.js.map"
9
+ "dist/**/*.d.ts"
11
10
  ],
12
11
  "devDependencies": {
13
- "@midwayjs/core": "^3.0.2",
14
- "@midwayjs/decorator": "^3.0.2",
15
- "@midwayjs/koa": "^3.0.3",
16
- "@midwayjs/mock": "^3.0.2",
12
+ "@midwayjs/core": "^3.0.4-beta.1",
13
+ "@midwayjs/decorator": "^3.0.4-beta.1",
14
+ "@midwayjs/koa": "^3.0.4-beta.1",
15
+ "@midwayjs/mock": "^3.0.4-beta.1",
17
16
  "@types/consul": "0.40.0",
18
17
  "@types/sinon": "10.0.9",
19
18
  "nock": "13.2.2"
@@ -40,5 +39,5 @@
40
39
  "type": "git",
41
40
  "url": "https://github.com/midwayjs/midway.git"
42
41
  },
43
- "gitHead": "43a5971b284aa918d22d191236c5664b011f8d87"
42
+ "gitHead": "52bc37e7a570806c121b33a0e8ac1cd084445f5d"
44
43
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.default.js","sourceRoot":"","sources":["../../src/config/config.default.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE;YACR,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB;QACD,OAAO,EAAE;YACP,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;SACX;KACF;CACF,CAAC","sourcesContent":["export default {\n consul: {\n provider: {\n register: false,\n host: '127.0.0.1',\n port: 8500,\n strategy: 'random',\n },\n service: {\n id: null,\n name: null,\n tags: [],\n address: null,\n port: 7001,\n },\n },\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n Configuration,\n MidwayFrameworkType,\n} from '@midwayjs/decorator';\nimport {\n ILifeCycle,\n IMidwayApplication,\n IMidwayContainer,\n} from '@midwayjs/core';\nimport {\n IConsulProviderInfoOptions,\n IConsulRegisterInfoOptions,\n} from './interface';\nimport { ConsulProvider } from './lib/provider';\nimport * as DefaultConfig from './config/config.default';\n\n@Configuration({\n namespace: 'consul',\n importConfigs: [\n {\n default: DefaultConfig,\n },\n ],\n})\nexport class ConsulConfiguration implements ILifeCycle {\n /**\n * 有关 consul server 的配置\n */\n @Config('consul.provider')\n consulProviderConfig: IConsulProviderInfoOptions;\n\n /**\n * 有关 service registry 注册的信息\n */\n @Config('consul.service')\n consulRegisterConfig: IConsulRegisterInfoOptions;\n\n get consulProvider(): ConsulProvider {\n const symbol = Symbol('consulProvider');\n this[symbol] =\n this[symbol] || new ConsulProvider(this.consulProviderConfig);\n return this[symbol];\n }\n\n /**\n * 注册自己的条件\n * 由于环境的复杂性(多网卡、自动端口冲突) address 和 port 必须提供\n */\n get shouldBeRegisterMe(): boolean {\n const { address, port } = this.consulRegisterConfig;\n return this.consulProviderConfig.register && address.length > 0 && port > 0;\n }\n\n /**\n * 注册 consul 服务\n * @param container 容器 IoC\n * @param app 应用 App\n */\n async registerConsul(\n container: IMidwayContainer,\n app: IMidwayApplication\n ): Promise<void> {\n const config = this.consulRegisterConfig;\n const { address, port } = this.consulRegisterConfig;\n\n if (this.shouldBeRegisterMe) {\n config.name = config.name || app.getProjectName();\n config.id = config.id || `${config.name}:${address}:${port}`;\n\n config.check =\n config.check ||\n (config.check === false\n ? void 0\n : app.getFrameworkType() === MidwayFrameworkType.WEB\n ? {\n http: `http://${address}:${port}/consul/health/self/check`,\n interval: '3s',\n }\n : {\n tcp: `${address}:${port}`,\n interval: '3s',\n });\n\n Object.assign(this.consulRegisterConfig, config);\n\n // 把原始的 consul 对象注入到容器\n container.registerObject(\n 'consul:consul',\n this.consulProvider.getConsul()\n );\n await this.consulProvider.registerService(this.consulRegisterConfig);\n }\n }\n\n async onServerReady(\n container: IMidwayContainer,\n app?: IMidwayApplication\n ): Promise<void> {\n await this.registerConsul(container, app);\n }\n\n async onStop(\n container: IMidwayContainer,\n app?: IMidwayApplication\n ): Promise<void> {\n if (\n this.consulProviderConfig.register &&\n this.consulProviderConfig.deregister\n ) {\n const { id } = this.consulRegisterConfig;\n await this.consulProvider.deregisterService({ id });\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"consul.js","sourceRoot":"","sources":["../../src/controller/consul.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA+D;AAI/D,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAE3B,KAAK,CAAC,WAAW;QACf,OAAO;YACL,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;CACF,CAAA;AALC;IADC,IAAA,eAAG,EAAC,oBAAoB,CAAC;;;;mDAKzB;AANU,gBAAgB;IAF5B,IAAA,mBAAO,GAAE;IACT,IAAA,sBAAU,EAAC,SAAS,CAAC;GACT,gBAAgB,CAO5B;AAPY,4CAAgB","sourcesContent":["import { Controller, Get, Provide } from '@midwayjs/decorator';\n\n@Provide()\n@Controller('/consul')\nexport class ConsulController {\n @Get('/health/self/check')\n async healthCheck(): Promise<any> {\n return {\n status: 'success',\n };\n }\n}\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iDAAuE;AAA9D,8GAAA,mBAAmB,OAAiB;AAC7C,sDAAoC;AACpC,qDAAmC;AACnC,8CAA4B","sourcesContent":["export { ConsulConfiguration as Configuration } from './configuration';\nexport * from './controller/consul';\nexport * from './service/balancer';\nexport * from './interface';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":"","sourcesContent":["import * as Consul from 'consul';\nimport { ConsulOptions } from 'consul';\nimport RegisterOptions = Consul.Agent.Service.RegisterOptions;\n\nexport interface IServiceBalancer {\n /**\n * 根据服务名称选择实例\n * @param serviceName 注册的服务名称\n * @param passingOnly 只返回通过健康检查的实例,默认为 true\n */\n select(serviceName: string, passingOnly?: boolean): any | never;\n}\n\nexport interface IConsulBalancer {\n /**\n * 根绝策略返回负载均衡器\n * @param strategy 负载均衡策略\n */\n getServiceBalancer(strategy?: string): IServiceBalancer;\n}\n\nexport interface IConsulProviderInfoOptions extends ConsulOptions {\n /**\n * 本服务是否注册到 consul 服务器,默认是 NO 不会执行注册\n */\n register?: boolean;\n\n /**\n * 应用正常关闭的额时候自动反注册,默认是 YES 会执行反注册\n * 如果 register=false 改参数无效\n */\n deregister?: boolean;\n\n /**\n * 调用服务负载均衡的策略(default、random),默认是 random 随机\n */\n strategy?: string\n}\n\nexport interface IConsulRegisterInfoOptions extends RegisterOptions {\n /**\n * 注册 id 标识,默认是 name:address:port 的组合\n */\n id?: string;\n\n /**\n * 服务名称\n */\n name: string;\n\n /**\n * 服务地址\n */\n address: string;\n\n /**\n * 服务端口\n */\n port: number;\n\n /**\n * 服务标签\n */\n tags?: string[];\n\n /**\n * 健康检查配置,组件默认会配置一个(检查间隔是3秒),如果指定 check=false 则关闭 consul 健康检查\n */\n check?: {\n tcp?: string;\n http?: string;\n script?: string;\n interval?: string;\n ttl?: string;\n notes?: string;\n status?: string;\n }\n}\n\ndeclare module '@midwayjs/core/dist/interface' {\n interface MidwayConfig {\n consul?: IConsulProviderInfoOptions;\n service?: IConsulRegisterInfoOptions;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"balancer.js","sourceRoot":"","sources":["../../src/lib/balancer.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Consul from 'consul';\nimport { IServiceBalancer, IConsulBalancer } from '../interface';\n\nabstract class Balancer implements IServiceBalancer {\n protected constructor(protected consul: Consul.Consul) {\n //\n }\n\n async select(serviceName: string, passingOnly = true): Promise<any | never> {\n // throw new Error('not implemented');\n }\n\n async loadServices(serviceName: string, passingOnly = true): Promise<any[]> {\n if (passingOnly) return await this.loadPassing(serviceName);\n return await this.loadAll(serviceName);\n }\n\n private async loadAll(serviceName: string): Promise<any[]> {\n return (await this.consul.catalog.service.nodes(serviceName)) as any[];\n }\n\n private async loadPassing(serviceName: string): Promise<any[]> {\n const passingIds = [];\n const checks = (await this.consul.health.checks(serviceName)) as any[];\n\n // 健康检查通过的\n checks.forEach(check => {\n if (check.Status === 'passing') {\n passingIds.push(check.ServiceID);\n }\n });\n\n const instances = await this.loadAll(serviceName);\n return instances.filter(item => passingIds.includes(item.ServiceID));\n }\n}\n\nclass RandomBalancer extends Balancer {\n constructor(consul: Consul.Consul) {\n super(consul);\n }\n\n async select(serviceName: string, passingOnly = true): Promise<any | never> {\n let instances = await this.loadServices(serviceName, passingOnly);\n if (instances.length > 0) {\n instances = this.shuffle(instances);\n return instances[Math.floor(Math.random() * instances.length)];\n }\n\n throw new Error('no available instance named ' + serviceName);\n }\n\n /**\n * shuff by fisher-yates\n */\n shuffle(instances: Array<any>): Array<any> {\n const result = [];\n\n for (let i = 0; i < instances.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n if (j !== i) {\n result[i] = result[j];\n }\n result[j] = instances[i];\n }\n\n return result;\n }\n}\n\nexport class ConsulBalancer implements IConsulBalancer {\n constructor(private consul: Consul.Consul) {\n //\n }\n\n getServiceBalancer(strategy?: string): IServiceBalancer {\n switch (strategy) {\n case 'random':\n return new RandomBalancer(this.consul);\n }\n\n throw new Error('invalid strategy balancer');\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/lib/provider.ts"],"names":[],"mappings":";;;AAIA,iCAAiC;AAEjC,MAAa,cAAc;IAGzB,YAAY,eAA2C;QACrD,2BAA2B;QAC3B,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,eAA2C;QAE3C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,iBAAiC;QACvD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAChE,CAAC;CACF;AAtBD,wCAsBC","sourcesContent":["import {\n IConsulProviderInfoOptions,\n IConsulRegisterInfoOptions,\n} from '../interface';\nimport * as Consul from 'consul';\n\nexport class ConsulProvider {\n private readonly consul: Consul.Consul;\n\n constructor(providerOptions: IConsulProviderInfoOptions) {\n // should be, ignore config\n providerOptions.promisify = true;\n this.consul = Consul(providerOptions);\n }\n\n getConsul(): Consul.Consul {\n return this.consul;\n }\n\n async registerService(\n registerOptions: IConsulRegisterInfoOptions\n ): Promise<void> {\n await this.consul.agent.service.register(registerOptions);\n }\n\n async deregisterService(deregisterOptions: { id: string }): Promise<void> {\n await this.consul.agent.service.deregister(deregisterOptions);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"balancer.js","sourceRoot":"","sources":["../../src/service/balancer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA8E;AAC9E,8CAAiD;AACjD,iCAAiC;AAKjC,IAAa,eAAe,GAA5B,MAAa,eAAe;IAO1B,IAAI;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,kBAAkB,CAAC,QAAQ,GAAG,QAAQ;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AAZC;IADC,IAAA,kBAAM,EAAC,eAAe,CAAC;;+CACF;AAKtB;IADC,IAAA,gBAAI,GAAE;;;;2CAGN;AATU,eAAe;IAF3B,IAAA,mBAAO,GAAE;IACT,IAAA,iBAAK,EAAC,qBAAS,CAAC,SAAS,CAAC;GACd,eAAe,CAc3B;AAdY,0CAAe","sourcesContent":["import { Init, Inject, Provide, Scope, ScopeEnum } from '@midwayjs/decorator';\nimport { ConsulBalancer } from '../lib/balancer';\nimport * as Consul from 'consul';\nimport { IServiceBalancer, IConsulBalancer } from '../interface';\n\n@Provide()\n@Scope(ScopeEnum.Singleton)\nexport class BalancerService implements IConsulBalancer {\n @Inject('consul:consul')\n consul: Consul.Consul;\n\n private consulBalancer: ConsulBalancer;\n\n @Init()\n init(): void {\n this.consulBalancer = new ConsulBalancer(this.consul);\n }\n\n getServiceBalancer(strategy = 'random'): IServiceBalancer {\n return this.consulBalancer.getServiceBalancer(strategy);\n }\n}\n"]}