Moleculer, a modern microservices framework for NodeJS

译自:Moleculer Blog,作者:Icebob,发表时间:Jun 7, 2017

moleculer

Moleculer, Nodejs 上现代化的微服务框架

我宣布经过半年的努力,我为 Node.js 创造了一个全新的微服务框架。

What‘s Moleculer

Moleculer 是一个开源的、快速的、可扩展的框架,基于 MIT 协议。它支持很多重要的微服务相关功能(服务注册,自动发现,负载均衡,断路器等)。

Key features

  • 基于 Promise 的解决方案(Bluebird)
  • 请求 - 响应的理念
  • 事件驱动架构,支持负载均衡
  • 支持中间件
  • 内置缓存解决方案(内存,Redis)
  • 支持多种传输器(TCP,NATS,MQTT,Redis,AMQP,NATS Streaming,Kafka)
  • 支持多种序列化器(JSON,Avro,MsgPack,Protocol Buffer)
  • 请求的负载均衡(round-robin,random)
  • 自动发现服务
  • 健康监测,指标和统计数据

Install

通过 npm 包管理器可以安装 Moleculer,你可以使用 npm 或 yarn。

1
npm install moleculer

Usage

下面的这个小例子展示了使用 Moleculer 创建和调用服务有多简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const { ServiceBroker } = require("moleculer");
// Create broker
let broker = new ServiceBroker({ logger: console });
// Create a service
broker.createService({
name: "math",
actions: {
// You can call it as broker.call("math.add")
add(ctx) {
return Number(ctx.params.a) + Number(ctx.params.b);
}
}
});
// Start broker
broker.start();
// Call actions of service
broker.call("math.add", { a: 5, b: 3 }).then(res => console.log("5 + 3 =", res));

正如所见,我们创建了一个 math 服务,有一个 actionadd。 这个 action 的作用是对两个参数求和。 创建后,我们可以使用 broker.call 方法调用它。broker.call 第一个参数是 path(ervice name + action name),第二个参数是调用 path 指定的 action 需要的参数(需要包装成对象再传递)。

在 Runkit 网站上,你可以在浏览器中运行上述代码。

Create a project

使用 Molecular CLI 工具可以创建一个基于 Molecular 的微服务。

1
2
3
4
5
# 1. 全局安装 moleculer-cli
npm install moleculer-cli -g2.

# 2. 创建一个新项目
moleculer init project moleculer-demo

安装过程中,遇到提问全部选 Yes

然后我们得到了一个 service(greeter),其中中包含基于 Jest 的测试,还有集成了 API 网关功能。

进入 moleculer-demo 的目录,启动

1
2
cd moleculer-demo
npm run dev

打开: http://localhost:3000/api/greeter/hello 链接。它将会调用 greeter 服务的 helloaction.
打开: http://localhost:3000/api/greeter/welcome?name=world 链接将会调用 welcomeaction.

Congratulations!你成功创建了你的第一个 Moleculer 的微服务。欢迎打开微服务的大门。

如果你想了解更多关于 Moleculer 框架的知识,请查阅我们的网站 https://moleculer.services 或者 github:https://github.com/moleculerjs/moleculer.
你也可以在 Twitter 上关注我们 @MoleculerJS 或者加入 Gitter 同我们交流.

如果你喜欢这篇文章,可以在下方给我们点赞和留言。