HOW - Moleculer 微服务构建分布式服务系统

文章目录

Moleculer 是一个 Node.js 微服务框架 ,专门用于构建 分布式服务系统

它的设计目标类似于 Java 里的 Spring CloudApache Dubbo,但更适合 Node.js 生态。

一、Moleculer 的核心架构

Moleculer 的基本单元是 Service

典型架构:

复制代码
API Gateway
      |
      v
+-------------------+
|  Moleculer Broker |
+-------------------+
   |      |      |
   v      v      v
UserSvc OrderSvc ProductSvc

核心组件:

概念 作用
Service 业务模块
Broker 服务运行容器
Action 服务方法(RPC)
Event 事件通信
Transporter 服务发现 & 消息传输

二、最基础实践(服务设计)

1 创建 Broker

js 复制代码
const { ServiceBroker } = require("moleculer");

const broker = new ServiceBroker({
  nodeID: "node-1",
  transporter: "NATS"
});

broker.start();

transporter 用于:

  • 服务发现
  • RPC通信
  • 事件分发

常见:

  • NATS
  • Redis
  • Apache Kafka

2 定义 Service

js 复制代码
broker.createService({
  name: "users",

  actions: {
    get(ctx) {
      return { id: ctx.params.id, name: "Tom" };
    }
  }
});

调用:

js 复制代码
broker.call("users.get", { id: 1 });

返回:

复制代码
{ id: 1, name: "Tom" }

三、实践一:API Gateway

通常用 moleculer-web

安装:

复制代码
npm install moleculer-web

网关:

js 复制代码
const ApiGateway = require("moleculer-web");

broker.createService({
  mixins: [ApiGateway],

  settings: {
    routes: [
      {
        path: "/api",

        aliases: {
          "GET users/:id": "users.get"
        }
      }
    ]
  }
});

访问:

复制代码
GET /api/users/1

自动调用:

复制代码
users.get

四、实践二:服务拆分(真实微服务)

推荐结构:

复制代码
services/
  users.service.js
  orders.service.js
  products.service.js
gateway.service.js

例如:

users.service.js

js 复制代码
module.exports = {
  name: "users",

  actions: {
    get(ctx) {
      return { id: ctx.params.id, name: "Tom" };
    }
  }
};

orders.service.js

js 复制代码
module.exports = {
  name: "orders",

  actions: {
    create(ctx) {
      return {
        orderId: 100,
        user: ctx.params.userId
      };
    }
  }
};

五、实践三:服务之间调用

js 复制代码
actions: {
  async createOrder(ctx) {
    const user = await ctx.call("users.get", { id: ctx.params.userId });

    return {
      order: 1,
      user
    };
  }
}

这就是:

复制代码
RPC service call

六、实践四:事件驱动

发布事件:

js 复制代码
broker.emit("user.created", {
  id: 1,
  name: "Tom"
});

监听事件:

js 复制代码
events: {
  "user.created"(payload) {
    console.log("User created", payload);
  }
}

适用于:

  • 订单创建
  • 用户注册
  • 日志
  • 数据同步

七、实践五:数据库集成

常见搭配:

数据库 用法
MongoDB moleculer-db
PostgreSQL ORM
MySQL ORM

例如:

js 复制代码
const DbService = require("moleculer-db");

module.exports = {
  name: "users",
  mixins: [DbService]
};

八、实践六:服务发现

如果使用:

复制代码
transporter: "NATS"

Moleculer 会自动实现:

  • 服务注册
  • 服务发现
  • 负载均衡

例如:

复制代码
users.get

可能被:

复制代码
node-1
node-2
node-3

轮询处理。

九、实践七:容错机制

Moleculer 内置:

功能 说明
retry 自动重试
timeout RPC超时
circuit breaker 熔断
rate limit 限流

例如:

js 复制代码
actions: {
  get: {
    timeout: 2000,
    retries: 3,

    handler(ctx) {
      return { ok: true };
    }
  }
}

十、生产环境常见架构

真实项目常见结构:

复制代码
                +----------------+
                | API Gateway    |
                +----------------+
                         |
         +---------------+----------------+
         |                                |
   +------------+                   +------------+
   | User Svc   |                   | Order Svc  |
   +------------+                   +------------+
         |                                |
   +------------+                   +------------+
   | MySQL      |                   | MySQL      |
   +------------+                   +------------+

消息总线:

复制代码
NATS / Kafka

十一、Moleculer 最大优势

优势 说明
开箱即用 微服务能力内置
RPC 调用 非常简单
自动服务发现 不需要额外组件
事件系统 内置
性能高 Node生态中非常快

很多 Node 微服务项目会用它替代:

  • Express.js
  • NestJS

十二、Moleculer 的缺点

实践中也有一些问题:

问题 说明
社区不算特别大 相比 NestJS
TypeScript 生态一般
运维复杂度上升 微服务固有问题

十三、一个真实企业实践(简化版)

复制代码
API Gateway
   |
   v
Moleculer Broker Cluster
   |
   +-- user-service
   +-- order-service
   +-- payment-service
   +-- notification-service
   |
   +-- Redis
   +-- MySQL

通信:

复制代码
RPC + Event
相关推荐
Nontee1 小时前
Redis高可用架构解析
数据库·redis·架构
海兰3 小时前
【实战】HiMarket本地化部署指南
人工智能·ubuntu·架构·银行系统
AI精钢4 小时前
谷歌时隔一年发布“更加开源“的 Gemma 4,意图何为?
人工智能·云原生·开源·aigc
小程故事多_804 小时前
自然语言智能体控制框架,重塑AI Agent的协作与执行范式
人工智能·架构·aigc·ai编程·harness
2501_933329555 小时前
技术深度拆解:Infoseek舆情系统的全链路架构与核心实现
开发语言·人工智能·分布式·架构
Fzuim5 小时前
Claude Code v2.1.88 三层「自愈记忆」架构深度解析
ai·架构·claude code·上下文管理·记忆机制
缘友一世5 小时前
PentestGPT V2源码研究之事件驱动架构详解(TUI 与核心引擎通信机制)
架构·事件驱动·tui
小陈工6 小时前
Python Web开发入门(十):数据库迁移与版本管理——让数据库变更可控可回滚
前端·数据库·人工智能·python·sql·云原生·架构
Ulyanov6 小时前
Pymunk 2D物理游戏开发教程系列 第二篇:约束与关节篇 -《摇摆特技车》
python·架构·系统仿真·雷达电子战·仿真引擎
薛定猫AI7 小时前
【技术干货】Gemma 4 上手深度指南:本地多模态大模型的新基线
人工智能·架构·自动化