Seneca是什么?
(1)官网是这样介绍的:
Seneca is a microservices toolkit for Node.js.
It helps you write clean, organized code that you can scale and deploy at any time.
大概意思是:Seneca是一个库,在Node平台上开发微服务时用的,它能够帮助开发人员写出干净、有组织的代码,同时也利于项目更新和部署。
(2)百度百科是这样介绍的:
Seneca是Node.js微服务框架开发工具。它的目的在于复制架构师和开发人员的服务想法,提供方法把代码融入到由模式所触发的逻辑行为中,这是根据用例所作用的模型。一旦被定义,模式就可以轻松转为API,使用用例和模式来定义消息内容。
除了第一句好理解,Seneca是一个Node.js微服务框架的开发工具,后面讲的就比较抽象了;模式可以轻松转API,所以什么是模式呢?
为什么要用Seneca?
我们前面已经了解到Seneca是在Node平台上开发微服务框架时候用的,那么我们为什么要选择它呢,它有哪些好处?
- 代码结构清晰
- 使项目易于更新,部署
Seneca 能做到这些,原因在于它的三大核心功能:
- 模式匹配
- 无依赖传输(可以是消息,http,tcp等)
- 组件化(插件)
后面将会结合代码示例,详细介绍如何使用这三大功能。
怎么样使用Seneca?
模式匹配 (Patterns )
(1)模式匹配是什么?
我们知道微服务中存在两个角色,一个服务端,一个客户端;通常服务端以Restful API形式提供微服务, 客户端通过HTTP 请求调用微服务。而使用Seneca,服务调用是基于消息的,消息之间则通过模式匹配来确保服务的唯一性;消息就是一个可以有任何你喜欢的内部结构的 JSON 对象。
一个简单的示例,一个进行数学计算,另一个调用它
const seneca = require('seneca')();
seneca.add('role:math, cmd:sum', (msg, reply) => {
reply(null, {
answer: ( msg.left + msg.right )})
});
seneca.act({
role: 'math', cmd: 'sum', left: 1, right: 2 }, (err, result) => {
if (err) {
return console.error(err);
}
console.log(result);
});
服务端添加服务:seneca.add()
客户端调用服务: seneca.act()
中间的消息,通过模式匹配。
(2)模式匹配几大特点
- 优先多属性匹配原则
- 模式唯一
- 代码复用
其中,前面两点比较好理解,匹配的属性越多,优先级越高,调用对应的服务;模式唯一,意思是服务端Seneca.add时的匹配消息不能重复,可以按照模块来;代码复用,基于模式的代码复用this.act
(3)如何使用插件(组件化)
Seneca插件只是一组操作模式的集合,简单来说,Seneca插件就只是一个具有单个参数选项的函数,你将这个插件定义函数传递给 seneca.use 方法,下面是个简单的的Seneca插件:
function my_plugin(options) {
console.log(options)
this.