ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Moleculer 微服务框架上手指南:核心概念、首个服务示例与项目脚手架

Moleculer 微服务框架上手指南:核心概念、首个服务示例与项目脚手架 后端RPC框架服务注册发现【免费下载链接】moleculer:rocket: Progressive microservices framework for Node.js项目地址https://gitcode.com/gh_mirrors/mo/moleculer点击查看免费下载Moleculer 是面向 Node.js 的快速、现代且功能强大的微服务框架本指南以其官方 README 为核心结合仓库源码src、examples深入讲解框架的核心设计、安装方式、第一个服务的编写与调用、基于 CLI 的项目脚手架搭建以及内建的能力矩阵。读完本文你将具备独立创建一个 Moleculer 微服务项目、编写并调用服务 Action、并根据需求选型传输器、缓存、日志、序列化器等组件的能力。本仓库当前版本为 0.15.1见 package.json要求 Node.js 22.x。Moleculer 是什么Moleculer 是一个基于 Promise 的微服务框架天然兼容async/await。它帮助你构建高效、可靠且可水平扩展的分布式服务集群。与部分“主从式”微服务框架不同Moleculer 采用无主master-less架构——集群中所有节点地位平等没有中心协调节点服务注册表Service Registry在每个节点上以分布式的方式同步维护。这一设计体现在源码结构中核心入口 index.js 导出ServiceBroker、Service、Context、Transit、Registry、Cachers、Transporters、Serializers、Strategies、Middlewares、Errors等全部核心构件任何功能都可以按需取用。框架围绕几个核心抽象展开ServiceBroker框架的心脏负责管理服务、处理调用、维护集群状态Service一个业务单元的载体内部由一组 Action可远程调用的方法与 Event事件处理构成Context一次调用的上下文对象携带参数、元数据、调用链信息等Transit节点间通信的传输层抽象了各类 TransporterRegistry服务与节点的注册发现中心配合负载均衡策略分发请求。框架功能全景Whats includedREADME 明确列出了框架内建的能力这些特性在 src 目录中均有对应实现可逐一对照Promise 化与 async/await 兼容broker 的start()、call()、stop()等核心方法全部返回 Promise见 service-broker.js 中start()的链式实现request-reply 请求-响应模型通过broker.call()发起同步远程调用支持带负载均衡的事件驱动架构事件可广播到多个节点并按策略均衡消费内建服务注册表与动态服务发现由 registry 模块实现负载均衡的请求与事件分发内置 round-robin、random、cpu-usage、latency、sharding 五种策略见 src/strategies 与 endpoint-list.js 中的策略选择逻辑丰富的容错能力Circuit Breaker熔断、Bulkhead舱壁隔离、Retry重试、Timeout超时、Fallback降级插件 / 中间件系统内置中间件清单见 middlewares/index.js涵盖熔断、超时、重试、缓存、校验、指标、追踪、防抖、节流、热重载、加密压缩与调试日志等版本化服务支持同一服务可发布多个版本便于灰度发布Streams 流式传输支持可传递 Node.js 流对象服务 Mixin 混入机制实现代码复用内建缓存方案Memory、MemoryLRU、Redissrc/cachers可插拔日志器Console、File、Pino、Bunyan、Winston、Debug、Datadog、Log4jssrc/loggers可插拔传输器TCP、NATS、MQTT、Redis、Kafka、AMQP 0.9、AMQP 1.0src/transporters可插拔序列化器JSON、JSONExt、MsgPack、CBOR、Notepacksrc/serializers可插拔参数校验器默认内置基于 fastest-validator单个节点 / 服务器上可运行多个服务一个 broker 进程可注册任意多个服务内建 Metrics 指标功能Console、CSV、Datadog、Event、Prometheus、StatsD 报告器src/metrics内建 Tracing 追踪功能Console、Datadog、Event、Jaeger、Zipkin、NewRelic 导出器src/tracing/exporters。此外还有官方的 API 网关moleculer-web、数据库访问moleculer-db等模块生态可通过官方模块列表页进一步查阅。安装 MoleculerMoleculer 通过 npm 或 yarn 安装使用任意包管理器执行其一即可$ npm i moleculer或$ yarn add moleculer安装后框架以 CommonJS 为默认模块形式type: commonjs见 package.json同时通过exports字段同时提供requireindex.js与importindex.mjs两种入口ESM 环境下可直接import使用。仓库中还提供了 ESM 运行器moleculer-runner-esmbin/moleculer-runner.mjs与 ESM 示例examples/esm、test/esm。创建你的第一个微服务README 给出了一个经典的入门示例创建一个包含addAction可将两个数字相加的服务并调用它。以下为完整代码const { ServiceBroker } require(moleculer); // 创建 broker const broker new ServiceBroker(); // 创建服务 broker.createService({ name: math, actions: { add(ctx) { return Number(ctx.params.a) Number(ctx.params.b); } } }); // 启动 broker broker.start() // 调用服务 .then(() broker.call(math.add, { a: 5, b: 3 })) .then(res console.log(5 3 , res)) .catch(err console.error(Error occurred! ${err.message}));执行后控制台将输出5 3 8。这段代码虽然简短却完整走过了微服务框架的四个核心阶段创建 broker → 注册服务 → 启动 → 调用。关键 API 的源码级解读new ServiceBroker(options)构造函数见 service-broker.js负责组装框架的全部子系统。从源码可以看到构造阶段会依次完成合并默认配置、初始化日志工厂、创建 Metrics 注册表、加载中间件处理器、初始化服务注册表、解析并初始化 Cacher缓存器、Serializer序列化器、Validator校验器、Tracer追踪器并依据transporter配置创建 Transit 传输层。因此即使不做任何配置new ServiceBroker()也会带上完整的本地能力——只是默认不启用网络传输transporter: null。broker.createService(schema)注册一个服务服务名name与 Action 名称一起组成全局唯一的调用名例如math.add。仓库中的 examples/math.service.js 展示了更完整的服务定义一个 Action 可以简写为add(ctx) { ... }这样的函数也可以扩展为{ params: {...}, handler(ctx) {...} }对象形式为 Action 声明参数校验规则。例如div使用params: { a: { type: number, convert: true }, b: { type: number, notEqual: 0, convert: true } }既校验类型又禁止除数为零体现内建校验器的用法。broker.start()启动过程在 service-broker.js 中完整呈现典型调用链为触发starting中间件钩子 → 连接 Transit若配置了传输器→ 启动所有已注册服务的started生命周期 → 广播$broker.started内部事件 → 触发started中间件钩子。它返回 Promise这正是示例中broker.start().then(...)链式调用的来源。broker.call(actionName, params, opts)调用逻辑见 service-broker.js。源码显示call()会先创建或复用一个Context然后通过findNextActionEndpoint()结合负载均衡策略选出目标端点本地节点或远程节点最后执行ctx.endpoint.action.handler(ctx)并返回 Promise。也就是说对调用方而言本地调用与远程调用的 API 完全一致——框架在内部完成路由与分发这是 Moleculer“透明 RPC”的核心体验。一个可运行的完整变体仓库中的 examples/simple/index.js 提供了上述示例的“多 Action 版本”并演示了错误处理与异常携带的上下文信息const ServiceBroker require(../../src/service-broker); const broker new ServiceBroker({ logger: console, transporter: null }); broker.loadService(__dirname /../math.service.js); broker .start() .then(() broker.call(math.add, { a: 5, b: 3 })) .then(res broker.logger.info( 5 3 , res)) .then(() broker.call(math.div, { a: 5, b: 0 })) .catch(err { broker.logger.error(Error occurred! Action: ${err.ctx.action.name}, Message: ${err.code} - ${err.message}); });注意其中两点一是通过logger: console将日志直接输出到控制台二是当math.div触发“除零”错误时err.ctx中携带了触发该错误的 Action 名称与调用参数异常由 src/errors 中的MoleculerError抛出见 math.service.js便于错误定位。创建完整的 Moleculer 项目手写服务固然简单但生产级项目往往需要标准的目录结构、开发环境与样板代码。Moleculer 官方提供了 CLI 脚手架工具moleculer-cli只需四步即可搭建一个开箱即用的项目1. 创建新项目项目名moleculer-demo$ npx moleculer-cli -c moleculer init project moleculer-demo其中-c moleculer指定项目模板moleculer 默认模板init project name为初始化命令。2. 进入项目目录$ cd moleculer-demo3. 启动项目$ npm run devdev脚本通常以开发模式运行nodemon 热重载代码变更后服务自动重启非常适合开发迭代。4. 打开欢迎页浏览器访问 http://localhost:3000/页面会展示项目信息并可直接在网页上测试脚手架生成的服务。至此你的第一个基于 Moleculer 的微服务项目已创建完成。脚手架会生成 broker 配置、服务目录、API 网关等标准结构后续可在此基础上按业务扩展。与脚手架项目对应的可运行配置仓库中亦有若干参照简单多服务示例examples/index.js含 math.service.js、user.service.js 等客户端-服务端分离调用examples/client-server/client.js 与 examples/client-server/server.jsDocker 化部署完整配置见 examples/docker其中客户端与工作节点各有独立的 moleculer.config.js并通过 docker-compose.yml 编排多节点集群节点脚本与编排见 examples/multi-nodesTypeScript 项目examples/typescript含tsconfig.json与index.ts、mixin.tsESM 项目examples/esm含.mjs与.cjs配置/服务文件。框架源码结构速览要在真实项目中用好 Moleculer理解源码布局会事半功倍。本仓库 src 目录即框架全部实现核心模块如下目录 / 文件职责service-broker.jsServiceBroker 主类生命周期、服务管理、调用分发service.js服务抽象Action、Event、生命周期钩子、Mixincontext.js调用上下文参数、元数据、调用链transit.js传输层打包、发送、接收消息registry服务 / 节点 / Action / Event 注册表与发现器middlewares内置中间件熔断、超时、重试、缓存、校验、追踪等cachers缓存实现Memory、MemoryLRU、Redistransporters传输器TCP、NATS、MQTT、Redis、Kafka、AMQPserializers序列化器JSON、JSONExt、MsgPack、CBOR、Notepackstrategies负载均衡策略round-robin、random、cpu-usage、latency、shardmetrics指标注册表与报告器tracing分布式追踪器与导出器errors错误体系MoleculerError及各子类utils通用工具函数其中负载均衡策略的选择发生在注册表层EndpointList构造时实例化策略select()时调用this.strategy.select(list, ctx)选出下一个端点见 endpoint-list.js而具体使用哪种策略既可在 broker 全局配置也可通过strategy/strategyOptions按 Action 或事件单独指定见 action-catalog.js 与 event-catalog.js。测试与验证仓库自带完善的测试体系可用于验证框架行为、作为二次开发的参照单元测试test/unit 覆盖各模块例如 service-broker.spec.js、transit.spec.js、各传输器 / 缓存 / 策略的*.spec.js集成测试test/integration 覆盖多服务协作、熔断、事件均衡、流式传输、追踪等场景端到端测试test/e2e 通过 start.sh 启动多节点真实集群场景如 test/e2e/scenarios/balancing类型测试test/typescript/tsd 使用tsd校验 TypeScript 类型定义。从 package.json 的 scripts 可以看到对应的运行命令例如单元测试npm run test:unit、集成测试npm run test:int、类型测试npm run test:ts、代码规范npm run lint。官方文档、变更记录与安全完整文档Moleculer 的官方文档站点提供了从基础到进阶的完整指南是深入学习每个配置项与中间件的首选变更记录本仓库的 CHANGELOG.md 记录了各版本的功能演进与破坏性变更针对 0.13 / 0.14 / 0.15 的升级指引见 docs 目录下的三份 MIGRATION_GUIDE 文档安全报告若发现安全漏洞请按 SECURITY.md 中的指引通过 Tidelift 安全联系渠道上报由维护者协调修复与披露贡献指南参与开发前请阅读 CONTRIBUTING.md并遵循仓库的 eslint 与 prettier 配置。Moleculer 采用 MIT 许可证可自由用于个人或商业项目。从“几行代码启动一个服务”到“数十节点的高可用集群”Moleculer 提供的 request-reply、事件驱动、服务发现、负载均衡、容错与可观测性能力足以支撑一套渐进式演进的微服务架构——这也正是其官方定位“Progressive microservices framework”的题中之义。赞分享后端RPC框架服务注册发现【免费下载链接】moleculer:rocket: Progressive microservices framework for Node.js项目地址https://gitcode.com/gh_mirrors/mo/moleculer点击查看免费下载相关推荐Moleculer一个现代化的微服务框架Moleculer一个现代化的微服务框架 项目基础介绍和主要编程语言 Moleculer 是一个快速、现代且功能强大的微服务框架专为 Node.js 设计。后端RPC框架服务注册发现Topshelf框架核心概念解析简化Windows服务开发Topshelf框架核心概念解析简化Windows服务开发 什么是Topshelf Topshelf是一个专为.NET平台设计的Windows服务框架它极Moleculer现代化Node.js微服务框架入门指南Moleculer现代化Node.js微服务框架入门指南 Moleculer是一个专为Node.js设计的现代化、高性能微服务框架采用无主架构设计支持动态后端RPC框架服务注册发现上一篇如何永久保存微信聊天记录WeChatMsg 完整备份与导出指南下一篇ComfyUI ControlNet Aux终极指南轻松实现AI图像生成精确控制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表