1.0.38 • Published 4 years ago
egg-seneca-gateway v1.0.38
egg-seneca-gateway
使用说明
插件以Egg.js
为应用框架,以Seneca
为服务交互支持,提供微服务方案。
整体结构分为两部分:
- 网关部分:安装插件
egg-seneca-gateway
,用以接收外部请求、被动接受子服务嵌入(发现)、提供子服务间交互; - 子服务部分: 安装插件
egg-seneca-subserver
,子服务开发与普通的Egg
应用开发无差异,仅配置和启动时机、其他服务交互方式不同。
启动顺序
- 先启动
网关
应用,被动等待子服务接入; - 启动
子服务
部分,网关
会生成相应的对外接口、对其他子服务的交互方式;
使用场景
- 基于 Egg.js + Seneca 的微服务模型, 网关部分。
- 暂不支持
REST
和GraphQL
风格
安装
$ npm i egg-seneca-gateway --save
开启插件
// config/plugin.js
exports.senecaGateway = {
enable: true,
package: 'egg-seneca-gateway',
};
详细配置
// {app_root}/config/config.default.js
/**
* 配置服务器启动项
*/
// 你的服务器定位(必要)
exports.cluster = {
listen: {
port: 20980,
hostname: '127.0.0.1',
},
};
// seneca gateway 配置
exports.senecaGateway = {
devLog: true, // 是否显示控制台交互日志, 默认为 false
server: {
host: '127.0.0.1',
port: 50005,
},
users: [
{ appid: 'Alalabu', appsecret: 'Thereisagoodboy.' }
],
};
服务注册
- 子服务通过
egg-seneca-subserver
会解析Egg应用中的Router
集合, 并发布于你的网关(安装了egg-seneca-gateway
的应用)。 - 在网关,会生成相应的
web API
以便客户端调用。 - 例如你的路由地址是
/findAll
,而senecaSubserver
中配置的server.name=user
- 则网关会生成:
/user/findAll
作为统一调用接口
微服务集视图一览
- 集成视图一览的网关需通过
git clone https://github.com/Alalabu/sheu-gateway.git your-gateway
进行获取 - 为方便展示网关可调用服务集合,网关启动后在浏览器输入
http://网关主机+端口号/
则可以访问微服务集图形界面视图。
服务心跳
- 每隔 30s 会监测子服务是否依然保持活跃, 若不活跃则删除子服务的访问
服务视图数据
// 可在任何能调用 Egg Application/Agent 对象的地方, 获取当前接入的服务群组数据视图
await app.registryClient.getConfig('SenecaRoutersCache');
更新日记
1.0.37
:
- 增加对
content-type: text/xml
网关数据发放的支持,在网关部分会将xml
解析成js
对象,并将子服务请求体改为content-type: application/json
,将xml
数据作为请求参数封装于POST请求的ctx.request.body.$options.xml
中,子服务可以判断该值是否存在并直接进行操作。1.0.35
:- 配置添加
senecaGateway.devLog = true | false
, 用以开启或关闭控制台日志, 默认关闭