You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过NATS服务器实现Nestjs网关调用Moleculer服务动作

实现方案

模式选择

直接使用请求-响应模式即可,你不需要手动实现NATS底层的主题收发逻辑:Moleculer框架的传输层已经基于NATS封装好了服务发现、动作调用的整套请求-响应逻辑,直接用封装好的能力即可。

配置步骤

1. 配置Moleculer服务的NATS传输器

打开你的Moleculer项目中的moleculer.config.js配置文件,修改传输器配置指向本地NATS服务:

module.exports = {
  // 其他原有配置保留
  transporter: "nats://localhost:4222",
};

配置完成后重启Moleculer服务,服务会自动连接本地NATS并注册动作。

2. 配置Nestjs网关的Moleculer模块

你已经安装了所需依赖,不需要额外安装包。在Nestjs项目的根模块(通常是app.module.ts)中注册Moleculer模块,配置NATS连接:

import { Module } from '@nestjs/common';
import { MoleculerModule } from 'nestjs-moleculer';

@Module({
  imports: [
    MoleculerModule.forRoot({
      transporter: 'nats://localhost:4222',
      // 其他Moleculer配置和你Moleculer服务保持一致即可,无特殊需求用默认配置即可
    }),
    // 其他你原有导入的模块保留
  ],
  // 原有controller、provider配置保留
})
export class AppModule {}

3. 在Nestjs中调用Moleculer动作

在需要调用Moleculer服务的Controller/Service中注入Moleculer客户端,直接调用对应动作即可,示例代码如下:

import { Controller, Get, Post, Body } from '@nestjs/common';
import { MoleculerService } from 'nestjs-moleculer';

@Controller('items')
export class ItemsController {
  constructor(private readonly moleculerService: MoleculerService) {}

  @Post()
  async createItem(@Body() data: any) {
    // 第一个参数格式为 你的Moleculer服务名.动作名,第二个参数为传递的参数
    return this.moleculerService.call('my-project.create', data);
  }

  @Get()
  async getItems() {
    return this.moleculerService.call('my-project.list', {});
  }
}

注意把上面的服务名、动作名替换为你实际在Moleculer服务中定义的名称。

4. 前置验证

启动服务前先确认NATS服务正常运行,执行以下命令检查状态:

sudo snap services nats

如果状态不是active,执行启动命令:

sudo snap start nats

启动顺序建议先启动Moleculer服务,再启动Nestjs网关,即可通过网关的API接口调用Moleculer的动作。

内容的提问来源于stack exchange,提问作者MrMz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:24:01