前言

豆瓣读书

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

seneca

github

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

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就是触发, 那么这个触发规则就是匹配模式了,越精确的就越优先匹配

{x:1,y:1}//func1 
{x:1}//func2 

act:{x:1,y:1}//触发func1 
act:{x:1}//触发func2 

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

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

//省略一些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的 具体就等大家去挖掘咯~