SenecaJS入门

SenecaJS入门

node微服务化


1.1 新建项目

1.2 安装SenecaJS

npm install seneca --save -dev

1.2 安装SenecaJS

初始化并使用 test.js

var seneca = require'seneca'));// create greeting servicevar pattern = { module: 'demo', action: 'greeting' };var action = function msg, done) {donenull, { answer: 'hello, ' + msg.name });}seneca.addpattern, action);// clientvar req = {module: 'demo', action: 'greeting', name:'Marlin'}seneca.act req, function error, result){if  error )console.logerror);elseconsole.logresult.answer);
});

运行 node test.js

hello, Marlin
{"kind":"notice","notice":"hello seneca ab51h4akkxqi/1495729709903/61561/3.3.0/-","level":"info","when":1495729710090}

1.3 到底发生什么了?

当 seneca.act) 执行时, SenecaJS 会使用 req 去比对服务注册的 pattern,如果 req 中含有 pattern 的全部属性名和值就匹配上了,如果有多个候选按以下顺序挑选:

属性更多的 pattern 胜出

  • req{a:1,b:2} 会从 {a:1}, {a:1, b:2} 中挑中 {a:1, b:2} 注意,{a:1} 也算匹配,如果只有
    {a:1},它就会挑中

  • 相同个数的话按字母序排: req{a:1,b:2,c:3} 会从 {a:1,b:2}, {a:1,c:3}中挑中{a:1,b:3}

  • 相同字母序的话,较晚注册的胜出 seneca.add{a:1,b:2}, f1).add{a:1,b:2}, f2) 的话,总是 f2
    起作用

这样就会找到之前通过 seneca.add) 注册了服务,然后 Seneca 会用收到的消息做为参数去调用 pattern 对应的函数。

2.1 编写服务器

单开一个项目,server.js 内容如下:

var seneca = require'seneca'));// greeting service
var pattern = { module: 'demo', action: 'greeting' };
var action = function msg, done) {donenull, { answer: 'hello, ' + msg.name });
}
seneca.addpattern, action);
seneca.listen7788);

比之前 Hello 那个单进程的例子,就多了最后一行。

2.2 启动服务器

{"kind":"notice","notice":"hello seneca 0mgfudkot8re/1495737576275/64494/3.3.0/-","level":"info","when":1495737576450}

2.3 编写客户端

单开一个项目,client.js 内容如下:

var seneca = require'seneca'));// client
seneca.client7788);var req = { module: 'demo', action: 'greeting', name:'Marlin' }
seneca.act req, function error, result){if  error ) console.logerror);else console.logresult.answer);
});

比 Hello 例子就多了 seneca.client7788) 这一行。

2.4 运行客户端

hello, Marlin
{"kind":"notice","notice":"hello seneca wzv6r4jyjiua/1495737582831/64509/3.3.0/-","level":"info","when":1495737583012}

2.5 发生了什么?

seneca.listen7788) 会在默认主机上用默认协议启动收听请求。服务器启动后,可以用 cURL 命令确认是否工作:

10:02server $ curl -d '{"module":"demo","action":"greeting","name":"Marlin"}' http://localhost:7788/act
{"answer":"hello, Marlin"}

seneca.client7788) 则告诉 Seneca 服务在默认主机上需要用默认协议通信。

Seneca 自带了 tcp 和 http 传输协议,通过插件模块还能支持更多种。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注