Nest 接口拆分-微服务
流程
安装
- 无论是总的还是拆分的,都需要安装
bash
pnpm install @nestjs/microservices --save总的服务器
创建两个模块
user
bbs
user.module.ts
- user 指向 3001 端口
ts
import { Module } from "@nestjs/common";
import { UserController } from "./user.controller";
import { ClientsModule, Transport } from "@nestjs/microservices";
@Module({
imports: [
ClientsModule.register([
{
name: "USER_SERVICE_3001",
transport: Transport.TCP,
options: {
host: "localhost",
port: 3001,
},
},
]),
],
controllers: [UserController],
providers: [],
})
export class UserModule {}user.controller.ts
ts
import { Controller, Get, Inject, Query } from "@nestjs/common";
import { ClientProxy } from "@nestjs/microservices";
@Controller("user")
export class UserController {
@Inject("USER_SERVICE_3001")
private userClient: ClientProxy;
@Get("sum")
sum(@Query("num") str: string) {
console.log(str);
const numAll = str.split("-");
const numArr = numAll.map((item) => Number(item));
console.log("这就是主的服务器");
console.log(numArr);
return this.userClient.send("sum", numArr);
}
}bbs.module.ts
ts
import { Module } from "@nestjs/common";
import { BbsController } from "./bbs.controller";
import { ClientsModule, Transport } from "@nestjs/microservices";
@Module({
imports: [
ClientsModule.register([
{
name: "USER_SERVICE_3000",
transport: Transport.TCP,
options: {
host: "localhost",
port: 3000,
},
},
]),
],
controllers: [BbsController],
providers: [],
})
export class BbsModule {}bbs.controller.ts
ts
import { Controller, Get, Inject, Query } from "@nestjs/common";
import { ClientProxy } from "@nestjs/microservices";
@Controller("bbs")
export class BbsController {
// 第二台服务器
@Inject("USER_SERVICE_3000")
private readonly userClientBBS: ClientProxy;
// 接口
@Get("sum")
sum(@Query("num") str: string) {
console.log(str);
const numAll = str.split("-");
const numArr = numAll.map((item) => Number(item));
console.log("这就是主的服务器");
console.log(numArr);
return this.userClientBBS.send("sum", numArr);
}
}user 服务器
main.ts
ts
import { NestFactory } from "@nestjs/core";
import { Transport, MicroserviceOptions } from "@nestjs/microservices";
import { AppModule } from "./app.module";
async function bootstrap() {
// 启动一个微服务 端口在3000
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.TCP,
options: {
port: 3001,
},
}
);
app.listen();
}
bootstrap();接口文件
- user.controller.ts
ts
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
} from "@nestjs/common";
import { UserService } from "./user.service";
//微服务
import { MessagePattern } from "@nestjs/microservices";
@Controller("user")
export class UserController {
constructor(private readonly userService: UserService) {}
// 微服务 返还给主的服务器
@MessagePattern("sum")
sum(numArr: Array<number>): number {
console.log("这个就是从的服务器");
console.log(numArr);
return numArr.reduce((pre, cur) => pre + cur, 0);
}
}bbs 服务器
main.ts
ts
import { NestFactory } from "@nestjs/core";
import { Transport, MicroserviceOptions } from "@nestjs/microservices";
import { AppModule } from "./app.module";
async function bootstrap() {
// 启动一个微服务 端口在3000
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.TCP,
options: {
port: 3000,
},
}
);
app.listen();
}
bootstrap();接口文件
- bbs.controller.ts
ts
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
} from "@nestjs/common";
import { BbsService } from "./bbs.service";
//微服务
import { MessagePattern } from "@nestjs/microservices";
@Controller("bbs")
export class BbsController {
constructor(private readonly bbsService: BbsService) {}
// 微服务 返回给总的服务器
@MessagePattern("sum")
sum(numArr: Array<number>): number {
console.log("这个就是bbs服务器");
console.log(numArr);
return numArr.reduce((pre, cur) => pre + cur, 0);
}
}备注
需要返回值就用
@MessagePattern不需要返回值就用
@EventPattern举例如下:
ts
@EventPattern('log')
log(str: string) {
console.log(str);
}- 分服务器
ts
this.userClient.emit("log", "求和");