SenecaJS节点微服务入门1.1新建项目1.2安装SenecaJSnpminstallseneca--save-dev1.2安装SenecaJS初始化并使用test.jsvarseneca=require('seneca')();//创建问候服务varpattern={module:'demo',action:'greeting'};varaction=function(msg,done){done(null,{answer:'hello,'+msg.name});}seneca.add(模式,动作);//客户端varreq={module:'demo',action:'greeting',name:'Marlin'}seneca.act(req,function(error,result){if(error)console.log(error);elseconsole.log(result.answer);});运行nodetest.jshello,Marlin{"kind":"notice","notice":"hellosenecaab51h4akkxqi/1495729709903/61561/3.3.0/-","level":"info","when":1495729710090}1.3究竟发生了什么?当执行seneca.act()时,SenecaJS将使用req来比较服务注册的模式。如果req包含pattern的所有属性名和值,则匹配。如果有多个候选者,则按以下顺序选择它们:更多属性patternwinsreq{a:1,b:2}willpick{a:1,b:2}from{a:1},{a:1,b:2}注意{a:1}也算匹配,如果只有{a:1},会按字母顺序挑相同数量的词:req{a:1,b:2,c:3}会从{a:1,b:2}中选出{a:1,b:3},{a:1,c:3}字母顺序相同,后面注册的winsseneca.add({a:1,b:2},f1).add({a:1,b:2},f2),总是f2起作用所以会找到之前的seneca.add()注册后服务,Seneca会以收到的消息为参数,调用模式对应的函数2.1写一个服务器,打开一个项目,server.js内容如下:varseneca=require('seneca')();//问候服务varpattern={module:'demo',action:'greeting'};varaction=function(msg,done){done(null,{answer:'hello,'+msg.name});}seneca.add(模式,动作);塞内卡听(7788);相比之前单进程的Hello例子,最后多了一行。2.2启动服务器{"kind":"notice","notice":"helloseneca0mgfudkot8re/1495737576275/64494/3.3.0/-","level":"info","when":1495737576450}2.3编写client打开单个项目,client.js内容如下:varseneca=require('seneca')();//clientseneca.client(7788);varreq={module:'demo',action:'greeting',name:'Marlin'}seneca.act(req,function(error,result){if(error)console.log(error);elseconsole.log(result.answer);});比Helloseneca.client(7788)这一行更多的例子。2.4运行客户端hello,Marlin{"kind":"notice","notice":"hellosenecawzv6r4jyjiua/1495737582831/64509/3.3.0/-","level":"info","when":1495737583012}2.5发生了什么?seneca.listen(7788)将使用默认协议在默认主机上发起监听请求。服务器启动后,可以使用cURL命令确认是否生效:10:02server$curl-d'{"module":"demo","action":"greeting","name":"Marlin"}'http://localhost:7788/act{"answer":"hello,Marlin"}seneca.client(7788)告诉Seneca服务使用默认主机上的默认协议进行通信。Seneca自带tcp和http传输协议,通过插件模块可以支持更多。
