nodejs微服务设计笔记

前言

豆瓣读书

这本书简单的介绍了如何使用nodejs来搭建微服务,一本实践与理论结合的书籍,如果对于微服务有比较深刻的了解就可以不用看这本书了,但是对于门外汉来说这本书还是有比较大的价值.

seneca

github

本书大半部分都围绕这个框架来写的. 这个框架就是实现微服务的一个工具罢了.
框架使用了匹配模式来触发函数,从而细粒化函数,比如.

1
2
3
4
5
6
7
seneca.add({role:"math",cmd:"sum"},function(msg,res){
var sum=msg.left+msg.right
res(null,sum)
})
seneca.act({role:"math",cmd:"sum",left:1,right:2},console.log)

add就是添加,act就是触发, 那么这个触发规则就是匹配模式了,越精确的就越优先匹配

1
2
3
4
5
{x:1,y:1}//func1
{x:1}//func2
act:{x:1,y:1}//触发func1
act:{x:1}//触发func2

这个也是这个框架的核心思想. 并且利用这个框架还可以使用plugin的方式

1
2
3
4
5
6
7
8
function math(ops){
this.add({role:"math",cmd:"sum"},function(msg,res){
var sum=msg.left+msg.right:
res(null,sum)
})
}
require('seneca')().use(math).act({role:'math',cmd:'sum',left:1,right:2})

通过插件那么可以细粒化各种业务逻辑,封装成一个个函数.

另一个seneca结合express也可以快速生成restfulApi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//省略一些add代码
seneca.add({role:"math",cmd:"sum"},function(arg,res){
var sum=10;
var result=sum+arg.id;
res(null,result);
})
seneca.add({role:"math",cmd:"print"},function(arg,res){
res(null,arg.printId)
})
seneca.act('role:web',{
use:{
prefix:"/api", //url前缀
pin:{
role:"math", //需要绑定哪个role分组
action:"*",//设置为*的意思是可以触发role分组下的所有的cmd
},
map:{
sum:{
GET:true,
suffix:"/:id" //通过arg.id获取 同等也可以/:id/:xx/:xx
},
print:{
GET:true,
POST:true,
suffix:"/:id"
}
}
}
})
app.use(seneca.export('web'));//app为express实例

。。。果然技术更新都是飞快..上述的express绑定已经不适用于现在的seneca了.
使用上述代码会报错app.use() requires middleware functions

新版的绑定请参考官网start

anyway,这个书至少给我打开了新世界的大门,hhhh 原来代码还可以这样玩.
当然这个框架还支持分布式服务 balabala的 具体就等大家去挖掘咯~