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入门相关推荐

  1. Seneca:NodeJS 微服务框架入门(一)

    Seneca是什么? (1)官网是这样介绍的: Seneca is a microservices toolkit for Node.js. It helps you write clean, org ...

  2. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  3. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  4. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  5. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  6. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  7. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  8. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  9. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

最新文章

  1. 模板方法模式(Template Pattern)
  2. harmonyos升级名单,鸿蒙系统升级名单已曝光:超46款旗舰设备可升级
  3. python 验证模型_Python中的模型验证
  4. k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...
  5. windows10环境下载labelImg及使用方法
  6. 外媒确认iPhone 13 Pro系列采用120Hz OLED面板:支持智能调节屏幕刷新率
  7. java 圆括号,Java圆括号翻转字符串
  8. 有什么办法让Beyond Compare以网页形式显示文件
  9. 怎么注册开通个人微信小程序
  10. 190601每日一句
  11. 自动阅卷的原理很简单的,用python来简单解释一下工作原理❤
  12. js加载本地shp数据到地图上_地图服务矢量数据获取方法总结
  13. 几个免费的中文分词模块
  14. 移动前端开发的一些简单分类!
  15. python樱桃小丸子_appium+python自动化启动app
  16. 跨越OpenGL和D3D的鸿沟
  17. DirectX11 模板测试
  18. python爬带用户名密码的网页_python爬虫:使用账号、密码和验证码登录知乎网页...
  19. 使用Python绘制圣诞树教程(附源代码)
  20. 多种卫星遥感数据反演光合有效辐射数据服务

热门文章

  1. 土豪小米天价域名背后 互联网商业模式重组
  2. influx的常规操作
  3. MATLAB批量处理.nii文件----批量.nii转为jpg格式
  4. 机器学习 第三节 第十课
  5. 稠密集和疏朗集_稠密集与疏朗集
  6. 编译安装 Python
  7. java 输出hello
  8. [Noi2005]聪聪和可可
  9. 因补助低!名校博士生开展大规模学术罢工行动!多校濒临崩溃
  10. XTU oj 1309唯一的子串