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) {done(null, { answer: 'hello, ' + msg.name });}seneca.add(pattern, action);// clientvar req = {module: 'demo', action: 'greeting', name:'Marlin'}seneca.act( req, function (error, result){if ( error )console.log(error);elseconsole.log(result.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) {done(null, { answer: 'hello, ' + msg.name });
}
seneca.add(pattern, action);
seneca.listen(7788);
比之前 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.client(7788);var req = { module: 'demo', action: 'greeting', name:'Marlin' }
seneca.act( req, function (error, result){if ( error ) console.log(error);else console.log(result.answer);
});
比 Hello 例子就多了 seneca.client(7788) 这一行。
2.4 运行客户端
hello, Marlin
{"kind":"notice","notice":"hello seneca wzv6r4jyjiua/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 传输协议,通过插件模块还能支持更多种。
SenecaJS入门相关推荐
- Seneca:NodeJS 微服务框架入门(一)
Seneca是什么? (1)官网是这样介绍的: Seneca is a microservices toolkit for Node.js. It helps you write clean, org ...
- 用Construct 2制作入门小游戏~
今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...
- Docker入门六部曲——Swarm
原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...
- Docker入门六部曲——Stack
原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...
- Docker入门六部曲——服务
原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...
- 【springboot】入门
简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...
- SpringBoot (一) :入门篇 Hello World
什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- 5 分钟入门 Google 最强NLP模型:BERT
BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...
最新文章
- 模板方法模式(Template Pattern)
- harmonyos升级名单,鸿蒙系统升级名单已曝光:超46款旗舰设备可升级
- python 验证模型_Python中的模型验证
- k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...
- windows10环境下载labelImg及使用方法
- 外媒确认iPhone 13 Pro系列采用120Hz OLED面板:支持智能调节屏幕刷新率
- java 圆括号,Java圆括号翻转字符串
- 有什么办法让Beyond Compare以网页形式显示文件
- 怎么注册开通个人微信小程序
- 190601每日一句
- 自动阅卷的原理很简单的,用python来简单解释一下工作原理❤
- js加载本地shp数据到地图上_地图服务矢量数据获取方法总结
- 几个免费的中文分词模块
- 移动前端开发的一些简单分类!
- python樱桃小丸子_appium+python自动化启动app
- 跨越OpenGL和D3D的鸿沟
- DirectX11 模板测试
- python爬带用户名密码的网页_python爬虫:使用账号、密码和验证码登录知乎网页...
- 使用Python绘制圣诞树教程(附源代码)
- 多种卫星遥感数据反演光合有效辐射数据服务