تطوير الواجهة الخلفية 1 دقيقة للقراءة 1,200 مشاهدات

بناء خدمات مصغّرة مع NestJS: الهندسة وأفضل الممارسات

صمّم وابنِ خدمات مصغّرة قابلة للتوسع باستخدام إطار NestJS. تعلّم عن قوائم الرسائل واكتشاف الخدمات وبوابات API.

Microservices architecture

الخدمات المصغرة باستخدام NestJS

ابنِ خدمات مصغرة قابلة للتوسّع والصيانة باستخدام إطار NestJS.

إعداد المشروع

npm i -g @nestjs/cli
nest new user-service
cd user-service
npm install @nestjs/microservices

إنشاء خدمة مصغرة

// main.ts
import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';

async function bootstrap() {
    const app = await NestFactory.createMicroservice<MicroserviceOptions>(
        AppModule,
        {
            transport: Transport.RMQ,
            options: {
                urls: ['amqp://localhost:5672'],
                queue: 'users_queue',
            },
        },
    );
    await app.listen();
}
bootstrap();

أنماط الرسائل

// users.controller.ts
@Controller()
export class UsersController {
    @MessagePattern({ cmd: 'get_user' })
    getUser(@Payload() data: { id: number }) {
        return this.usersService.findOne(data.id);
    }

    @EventPattern('user_created')
    handleUserCreated(@Payload() data: User) {
        this.analyticsService.trackUserCreation(data);
    }
}

بوّابة الواجهة البرمجية (API Gateway)

// gateway/users.controller.ts
@Controller('users')
export class UsersController {
    constructor(
        @Inject('USER_SERVICE') private client: ClientProxy,
    ) {}

    @Get(':id')
    async getUser(@Param('id') id: number) {
        return this.client.send({ cmd: 'get_user' }, { id });
    }
}

اكتشاف الخدمات باستخدام Consul

// Register service on startup
const consul = new Consul();
await consul.agent.service.register({
    name: 'user-service',
    address: 'localhost',
    port: 3001,
    check: { http: 'http://localhost:3001/health', interval: '10s' },
});

يوفّر NestJS أنماطاً ممتازة لبناء خدمات مصغرة بمستوى المؤسسات.

مشاركة هذه المقالة:
ES
كتبه

Edrees Salih

مهندس برمجيات متكامل يتمتع بخبرة 9 سنوات. شغوف ببناء حلول قابلة للتطوير ومشاركة المعرفة مع مجتمع المطورين.

عرض الملف الشخصي

التعليقات (0)

اترك تعليقًا

لن يتم نشر بريدك الإلكتروني.

لا توجد تعليقات بعد. كن أول من يشارك أفكاره!

مقالات ذات صلة

مقالات ذات صلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.