使用seneca
及相关插件, express
, node.js
,mongodb
搭建微服务
环境:
-
node: v8.4.0
-
npm: v5.3.0
-
pm2: 2.10.1
-
其他依赖,见
package.json
说明:
-
plugins
:seneca
插件目录 -
services
:seneca
微服务,生产环境时,微服务是分布式的,本项目为方便测试,不同微服务使用相同 host(127.0.0.1)的不同端口,例如productManager
微服务使用http://127.0.0.1:3001
-
plugins/api.js
: 是 api 聚合插件,通过调用各个微服务(如productManager
)用于给前端 ui 提供 api -
plugins/productManager.js
: 是一个具体的“商品管理服务” -
plugins/memoryLeak.js
:是一个内存溢出的微服务,用来测试 pm2 和 keymetrics 对应用监控的性能指标 -
plugins/mockLotsRequest.sh
:用来模拟大量请求,使memoryLeak.js
微服务内存溢出,观察 keymetrics 监控的内存指标
使用:
- 以
productManager
服务为例, 通过node services/productManager.js
等启动微服务,使用
curl -d '{"area": "product", "action": "test"}' http://localhost:3001/act
测试productManager
服务是否正常
-
npm start
启动seneca
整合了express.js
的应用 -
通过浏览器访问
http://localhost:3000/api/products
等获取数据,或者通过curl
测试 -
npm test
执行单元测试,执行完npm test
会通过npm
命令post
钩子执行npm posttest
检查覆盖率是否通过设定的指标(本项目设定代码行、分支、函数都为 75%) -
npm test:e2e
执行端到端测试 -
pm2 start plugins/memoryLeak.js
启动应用,并使用pm2 link secretKey publicKey [machine name]
将 pm2 的数据推送到 keymetrics -
npm run deploy-dev
,将应用部署到本地环境(部署目录,我的是/home/elsa/development
),然后访问http://localhost:3000/api/products
查看接口