egg-seneca-subserver
使用说明
插件以Egg.js
为应用框架,以Seneca
为服务交互支持,提供微服务方案。
整体结构分为两部分:
- 网关部分:安装插件
egg-seneca-gateway
,用以接收外部请求、被动接受子服务嵌入(发现)、提供子服务间交互; - 子服务部分: 安装插件
egg-seneca-subserver
,子服务开发与普通的Egg
应用开发无差异,仅配置和启动时机、其他服务交互方式不同。
启动顺序
- 先启动
网关
应用,被动等待子服务接入; - 启动
子服务
部分,网关
会生成相应的对外接口、对其他子服务的交互方式;
使用场景
- 基于 Egg.js + Seneca 的微服务模型, 子服务部分。
- 暂不支持
REST
和GraphQL
风格
安装
$ npm i egg-seneca-subserver --save
开启插件
// {app_root}/config/plugin.jsexportssenecaSubserver = enable: true package: 'egg-seneca-subserver';
详细配置
// {app_root}/config/config.default.js/** * 配置服务器启动项 */// 你的服务器定位(必要)exportscluster = listen: port: 20980 hostname: '127.0.0.1' // path: '/var/run/egg.sock', ;// seneca subserver 配置exportssenecaSubserver = appid: 'your appid' appsecret: 'your appsecret' devLog: true // 是否显示控制台交互日志, 默认为 false server: // 本服务的服务器描述 name: 'users' // service name port: 39091 title: '用户服务' // 当前服务的标题文本 describe: '这个服务用于负责用户相关业务' // 当前服务的描述 gateway: // 网关配置 host: '127.0.0.1' port: 50005 type: 'tcp' version: 17 // 注入网关的服务版本号 ;
服务注册
egg-seneca-subserver
会解析Egg应用中的Router
集合, 并发布于你的网关(安装了egg-seneca-gateway
的应用)。- 在网关,会生成相应的
web API
以便客户端调用。 - 例如你的路由地址是
/findAll
,而senecaSubserver
中配置的server.name=user
- 则网关会生成:
/user/findAll
作为统一调用接口
微服务集视图一览
- 为方便展示网关可调用服务集合,网关启动后在浏览器输入
http://网关主机+端口号/
则可以访问微服务集图形界面视图。 - 注意:集成视图一览的网关需通过
git clone https://github.com/Alalabu/sheu-gateway.git your-gateway
进行获取, 项目包含了egg-seneca-gateway
插件引用以及React + Ant design
视图模块, 便于二次修改. - 为了配合更好的视图一览效果,您的
Egg Router
应该定义路由名称,例如:
// {app_root}/app/router.jsmodule { const router controller = app; router; router; router; router; router;};
其他服务调用
- 当您的应用需要调用其他微服务应用时,您应该使用
seneca
进行tcp模式调用:
// {app_root}/app/service/foo.jsasync { const ctx = this; // ctx.app.seneca(服务名, 命令, 参数对象); const res = await ctxapp; return res;}
更新日记
1.0.37
:
- 增加对
content-type: text/xml
网关数据发放的支持,在网关部分会将xml
解析成js
对象,并将子服务请求体改为content-type: application/json
,将xml
数据作为请求参数封装于POST请求的ctx.request.body.$options.xml
中,子服务可以判断该值是否存在并直接进行操作。1.0.36
:- 修复了一个由于响应数据中带有长数字的字符串,在
JSON.parse
时发生的数字截断,之后的响应数据将不在自动解析,由调用者自行处理;1.0.35
:- 配置添加
senecaSubserver.devLog = true | false
, 用以开启或关闭控制台日志, 默认关闭