Nestjs微服务简单案例

相信大家,来看这篇博客,就应该知道微服务的概念。只是不太知道实用方法而已。下面我通过最简单的案例,来教会大家。

首先这是我的项目目录:

复制代码
nestwfw/
├── app/
├── project-microserices

app 是web服务,用来接收前端请求的网络请求

project-microserices 是一个微服务,名字都是随意的

安装

bash 复制代码
nest new app
nest new project-microservices

逻辑代码

1.首先编写微服务的代码,再去到web服务中去注册调用。所以我们先写project-microservices。

TypeScript 复制代码
// project-microservices/main.ts

import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(
    AppModule,
    {
      transport: Transport.TCP,
      options: {
        host: '127.0.0.1',
        port: 3001,
      }
    },
  );
  await app.listen();
}
bootstrap();
TypeScript 复制代码
// project-microservices/app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { MessagePattern } from '@nestjs/microservices';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) { }

  @MessagePattern('project:computedCount')
  computedCount(data: { num1: number, num2: number }): number {
    return this.appService.computedCount(data.num1, data.num2);
  }
}
TypeScript 复制代码
// project-microservices/app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  computedCount(num1: number, num2: number): number {
    console.log('project被调用来了')
    return num1 + num2;
  }
}

修改完这三出,你的一个微服务就横空出世了,接下来再去web服务中去调用即可。

2.在web服务中注册并使用

注册微服务,需要去app.module.ts中进行注册。

TypeScript 复制代码
// app/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ClientsModule, Transport } from '@nestjs/microservices';

@Module({
  imports: [
    ClientsModule.register([
      {
        name: 'PRODUCT_SERVICE',
        transport: Transport.TCP,
        options: {
          host: '127.0.0.1',
          port: 3001
        }
      }
    ])
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }

注册完之后,可以去使用了。

TypeScript 复制代码
// app/app.controller.ts

import { Controller, Get, Inject, Query } from '@nestjs/common';
import { AppService } from './app.service';
import { ClientProxy } from '@nestjs/microservices';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService,
    @Inject('PRODUCT_SERVICE') private client: ClientProxy
  ) { }
  @Get('/count')
  computeCount(@Query() query: { num1: number, num2: number }) {
    console.log(query)
    return this.client.send('project:computedCount', query)
  }
}

这样,就是一个最简单的微服务案例。如果大家还是有不懂可以自行百度或者留下评论。

相关推荐
wangjialelele3 小时前
一文梳理 Spring Cloud 核心组件:Eureka、Nacos、OpenFeign、LoadBalancer 与 Gateway
java·spring boot·spring·spring cloud·微服务·nacos
行者全栈架构师3 小时前
【鸿蒙心迹】让应用“悬浮“起来——闪控球(floatingBall)从接入到实战全链路(HarmonyOS 7.x)
前端·算法·架构
stillstream_ink3 小时前
‌双端电商系统的测试差异分析——别让“只测一端”漏掉80%的联动缺陷
架构·测试
吴建旭 智宅焕4 小时前
米家生态线控器标准装调专项卡:安装调试的标准化SOP与交付确定性架构
架构·智能家居
fpcc4 小时前
AI和大模型—Agent常见架构
人工智能·架构
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】Elasticsearch 从安装到 C++ 客户端二次封装全落地
linux·网络·数据库·c++·elasticsearch·微服务
做个文艺程序员5 小时前
MQ第12篇:AI原生消息架构演进:从MQ到事件驱动的全链路设计
架构·消息队列·wpf·事件驱动架构·ai-native·cqrs
怕浪猫5 小时前
LLMOps 架构设计:从零搭建一个 AI 平台,我画了完整的系统图
架构·llm·aigc
萧瑟余晖5 小时前
Spring Security 6.x新特性与架构演进详解
java·spring·架构
萧瑟余晖5 小时前
Spring Security架构总览与过滤器链详解
spring·架构