下面是一个使用 Moleculer 框架的简单微服务示例,包含两个服务(greeter
和 math
)以及 API 网关:
步骤 1: 创建项目并安装依赖
1 | mkdir moleculer-demo |
步骤 2: 创建服务文件
1. math.service.js
- 数学服务
1 | module.exports = { |
2. greeter.service.js
- 问候服务
1 | module.exports = { |
3. gateway.service.js
- API 网关
1 | const ApiGateway = require("moleculer-web"); |
4. index.js
- 入口文件
1 | const { ServiceBroker } = require("moleculer"); |
步骤 3: 运行服务
1 | node index.js |
测试服务
使用 curl 或浏览器测试 API:
1. 数学服务
1 | curl "http://localhost:3000/api/math/add?a=5&b=3" |
2. 问候服务
1 | curl -X POST "http://localhost:3000/api/greet" -d '{"name": "Alice"}' |
服务间直接调用(内部通信)
在服务中可以通过 broker.call
调用其他服务:
1 | // 在 greeter.service.js 中添加新动作 |
关键概念说明:
服务 (Services)
- 独立的功能单元(如
math
、greeter
) - 通过
actions
暴露功能
- 独立的功能单元(如
动作 (Actions)
- 服务的公共方法
- 支持同步/异步操作
- 自动生成 REST API(通过网关)
API 网关 (moleculer-web)
- 将 HTTP 请求路由到服务动作
- 支持参数映射和验证
服务间通信
- 使用
ctx.call("service.action")
调用其他服务 - 支持同步调用和 Promise
- 使用
服务发现
- 自动发现集群中的服务
- 无需手动配置服务位置
这个示例展示了 Moleculer 的核心功能:
- 微服务拆分
- 自动 REST API 暴露
- 服务间通信
- 参数验证
- 负载均衡(多实例时自动生效)
你可以通过添加更多服务或使用数据库连接(如 MongoDB)、消息队列(如 NATS)等中间件来扩展这个基础结构。