TypeScript पर माइक्रोसर्विसेज़: आर्किटेक्चर और प्रैक्टिस A से Z तक
\nआधुनिक वेब डेवलपमेंट में, मोनोलिथिक आर्किटेक्चर लचीले और स्केलेबल माइक्रोसर्विसेज़ को रास्ता दे रहा है। TypeScript अपनी सख्त टाइपिंग और शक्तिशाली टूल्स के साथ ऐसी प्रणालियों के निर्माण के लिए एक आदर्श भाषा बन गया है। इस लेख में, हम जानेंगे कि लोकप्रिय फ्रेमवर्क NestJS, मैसेज ब्रोकर RabbitMQ और कंटेनरीकरण Docker का उपयोग करके TypeScript पर माइक्रोसर्विसेज़ को कैसे डिज़ाइन और कार्यान्वित किया जाए।
1. TypeScript पर माइक्रोसर्विस आर्किटेक्चर के मूल सिद्धांत
\nमाइक्रोसर्विस आर्किटेक्चर में एप्लिकेशन को स्वतंत्र, शिथिल रूप से जुड़ी सेवाओं में विभाजित किया जाता है। प्रत्येक सेवा अपने व्यावसायिक तर्क (जैसे, उपयोगकर्ता प्रबंधन, ऑर्डर प्रोसेसिंग, भुगतान) के लिए जिम्मेदार होती है और इसे अलग से विकसित, तैनात और स्केल किया जा सकता है।
\n\nTypeScript क्यों?
\n- \n
- टाइपिंग: रनटाइम के बजाय कंपाइलेशन के समय त्रुटियाँ। विशेष रूप से नेटवर्क पर कई सेवाओं के बीच बातचीत करते समय महत्वपूर्ण। \n
- इंटरफ़ेस और प्रकार: API अनुबंधों को सख्ती से परिभाषित करने की अनुमति देते हैं (जैसे, अनुरोध/प्रतिक्रिया के लिए DTO)। \n
- आधुनिक JavaScript: TypeScript शुद्ध JS में कंपाइल होता है, जो Node.js में चलता है। \n
उपयोगकर्ता माइक्रोसर्विस के लिए एक सख्ती से टाइप किए गए DTO का सरल उदाहरण देखें:
\n\n// user.dto.ts\nexport interface CreateUserDto {\n readonly email: string;\n readonly password: string;\n readonly name: string;\n}\n\nexport interface UserResponse {\n id: string;\n email: string;\n name: string;\n createdAt: Date;\n}\n\nसेवाओं के बीच डेटा स्थानांतरित करते समय (HTTP या RabbitMQ के माध्यम से), TypeScript गारंटी देता है कि ऑब्जेक्ट की संरचना अपेक्षित के अनुरूप है। यह बगों की संख्या को काफी कम करता है।
\n\n2. NestJS के साथ माइक्रोसर्विस का कार्यान्वयन
\nNestJS Node.js के लिए एक प्रगतिशील फ्रेमवर्क है जो बॉक्स से बाहर माइक्रोसर्विस आर्किटेक्चर का समर्थन करता है। यह TCP, Redis, RabbitMQ, Kafka और gRPC के लिए ट्रांसपोर्टर प्रदान करता है।
\n\nRabbitMQ ट्रांसपोर्ट का उपयोग करके उपयोगकर्ताओं के प्रबंधन के लिए एक बुनियादी माइक्रोसर्विस बनाएं।
\n\nचरण 1: निर्भरताएँ स्थापित करना
\nnpm install --save @nestjs/core @nestjs/common @nestjs/microservices\nnpm install --save amqplib amqp-connection-manager\n\nचरण 2: मुख्य मॉड्यूल और कंट्रोलर बनाना
\n// user.controller.ts\nimport { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\nimport { CreateUserDto, UserResponse } from './user.dto';\n\n@Controller()\nexport class UserController {\n @MessagePattern('user.create')\n async createUser(@Payload() data: CreateUserDto): Promise<UserResponse> {\n // यहाँ डेटाबेस में उपयोगकर्ता बनाने का तर्क\n console.log('उपयोगकर्ता बनाना:', data);\n return {\n id: 'uuid-123',\n email: data.email,\n name: data.name,\n createdAt: new Date(),\n };\n }\n}\n\nचरण 3: माइक्रोसर्विस मोड में काम करने के लिए मुख्य फ़ाइल कॉन्फ़िगर करना
\n// main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { MicroserviceOptions, Transport } from '@nestjs/microservices';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n const app = await NestFactory.createMicroservice<MicroserviceOptions>(\n AppModule,\n {\n transport: Transport.RMQ,\n options: {\n urls: ['amqp://localhost:5672'],\n queue: 'user_queue',\n queueOptions: {\n durable: false,\n },\n },\n },\n );\n await app.listen();\n console.log('उपयोगकर्ता माइक्रोसर्विस शुरू हो गई है');\n}\nbootstrap();\n\nइस प्रकार, हमारी सेवा RabbitMQ से जुड़ती है और कतार user_queue को सुनती है। कोई भी अन्य सेवा (जैसे, ऑर्डर सेवा) इस कतार में संदेश प्रकाशित करके उपयोगकर्ता बना सकती है।