在上一篇文章中,我们介绍了 NestJS 的请求处理流程。本文将深入探讨如何使用 NestJS 构建微服务架构,实现从单体应用到分布式系统的转变。
微服务基础配置
1. 安装依赖
# 安装微服务相关依赖
npm install @nestjs/microservices
# 安装消息队列依赖
npm install amqplib @nestjs/microservices @golevelup/nestjs-rabbitmq
# 安装 gRPC 依赖
npm install @grpc/grpc-js @grpc/proto-loader
2. 微服务配置
// src/config/microservice.config.ts
import { Transport } from '@nestjs/microservices';
export const microserviceConfig = {
// RabbitMQ 配置
rabbitmq: {
transport: Transport.RMQ,
options: {
urls: [process.env.RABBITMQ_URL || 'amqp://localhost:5672'],
queue: 'main_queue',
queueOptions: {
durable: true,
},
},
},
// gRPC 配置
grpc: {
transport: Transport.GRPC,
options: {
package: 'hero',
protoPath: join(__dirname, '../proto/hero.proto'),
url: 'localhost:5000',
},
},
// TCP 配置
tcp: {
transport: Transport.TCP,
options: {
host: 'localhost',
port: 4000,
},
},
};
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';
import { microserviceConfig } from './config/microservice.config';
async function bootstrap() {
// 创建 HTTP 应用
const app = await NestFactory.create(AppModule);
// 注册微服务
app.connectMicroservice<MicroserviceOptions>(microserviceConfig.rabbitmq);
app.connectMicroservice<MicroserviceOptions>(microserviceConfig.grpc);
// 启动所有微服务
await app.startAllMicroservices();
// 启动 HTTP 服务
await app.listen(3000);
}
bootstrap();
消息队列集成
1. RabbitMQ 集成
// src/modules/orders/orders.module.ts
import { Module } from '@nestjs/common';
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
import { OrdersController } from './orders.controller';
import { OrdersService } from './orders.service';
@Module({
imports: [
RabbitMQModule.forRoot(RabbitMQModule, {
exchanges: [
{
name: 'orders',
type: 'topic',
},
],
uri: process.env.RABBITMQ_URL,
connectionInitOptions: { wait: false },
}),
],
controllers: [OrdersController],
providers: [OrdersService],
})
export class OrdersModule {}
// src/modules/orders/orders.service.ts
import { Injectable } from '@nestjs/common';
import { AmqpConnection } from '@golevelup/nestjs-rabbitmq';
import { CreateOrderDto } from './dto/create-order.dto';
@Injectable()
export class OrdersService {
constructor(private readonly amqpConnection: Am

最低0.47元/天 解锁文章
1308

被折叠的 条评论
为什么被折叠?



