TypeScript माइक्रोसर्विसेज़: मॉड्यूलर आर्किटेक्चर की ओर आपका पहला कदम
\n\nकल्पना करें कि आप एक घर बना रहे हैं। आप एक बड़ी दीवार खड़ी कर सकते हैं और फिर उसमें कमरे जोड़ सकते हैं। लेकिन अगर एक कमरा खराब हो जाए, तो पूरी इमारत प्रभावित होगी। विकल्प यह है कि अलग-अलग मॉड्यूल बनाएं: रसोई, बेडरूम, लिविंग रूम, हर एक का अपना वायरिंग और प्लंबिंग सिस्टम हो। मोटे तौर पर माइक्रोसर्विसेज़ इसी तरह काम करती हैं - स्वतंत्र, कमजोर रूप से जुड़े हुए घटक जो नेटवर्क के माध्यम से संवाद करते हैं।
\n\nमाइक्रोसर्विसेज़ के लिए TypeScript सिर्फ एक फैशन ट्रेंड नहीं है, बल्कि एक ऐसा टूल है जो अराजकता से बचाता है। स्टैटिक टाइपिंग प्रोडक्शन में नहीं, बल्कि कंपाइलेशन के समय ही एरर्स को पकड़ लेती है। इस लेख में हम जानेंगे कि अगर आप मोनोलिथ से माइक्रोसर्विसेज़ पर स्विच करना चाहते हैं तो TypeScript के साथ कहां से शुरू करें। बिना बकवास, वास्तविक कोड उदाहरणों के साथ।
\n\nसादे JavaScript की बजाय TypeScript क्यों?
\n\nजब आप माइक्रोसर्विसेज़ लिखते हैं, तो हर सर्विस एक अलग प्रोजेक्ट होती है। टाइप्स के बिना भ्रम होना आसान है: सर्विस A किस फॉर्मेट का डेटा उम्मीद करती है, सर्विस B क्या रिटर्न करती है? TypeScript इस समस्या को हल करता है:
\n\n- \n
- इंटरफेस और टाइप्स — आप सर्विसेज़ के बीच कॉन्ट्रैक्ट स्पष्ट रूप से परिभाषित करते हैं। \n
- ऑटोकम्प्लीट और रिफैक्टरिंग — IDE ऑब्जेक्ट के फील्ड्स सुझाता है, और नाम बदलने से कोड नहीं टूटता। \n
- Node.js के साथ संगतता — TypeScript JavaScript में कंपाइल होता है, जहां Node है वहां काम करता है। \n
उदाहरण: मान लीजिए कि ऑर्डर सर्विस डिलीवरी सर्विस को डेटा भेजती है। टाइप्स के बिना आप गलती से number की जगह string भेज सकते हैं। TypeScript कहेगा: "अरे, यहाँ number चाहिए, तुम string भेज रहे हो"।
\n\nशुरुआत के लिए ज़रूरी टूल्स
\n\nशुरू करने के लिए आपको चाहिए:
\n\n- \n
- Node.js (वर्जन 18+) — रनटाइम एनवायरनमेंट। \n
- TypeScript — ग्लोबली या प्रोजेक्ट में इंस्टॉल करें। \n
- NestJS — सर्वर-साइड एप्लिकेशन के लिए फ्रेमवर्क। यह आउट-ऑफ-द-बॉक्स माइक्रोसर्विसेज़ आर्किटेक्चर को सपोर्ट करता है। \n
- RabbitMQ या NATS — एसिंक्रोनस कम्युनिकेशन के लिए मैसेज ब्रोकर। \n
- Docker — हर सर्विस को कंटेनराइज़ करने के लिए। \n
डरें नहीं, यह सब 15 मिनट में सेट हो जाता है।
\n\nचरण 1: NestJS के साथ पहली माइक्रोसर्विस बनाएं
\n\nNestJS बैकएंड के लिए Angular जैसा है। यह डेकोरेटर, मॉड्यूल और प्रोवाइडर का उपयोग करता है। इसे इंस्टॉल करें:
\n\nnpm i -g @nestjs/cli\nnest new user-service\ncd user-service\nnpm install @nestjs/microservices\n\nअब सामान्य एप्लिकेशन को माइक्रोसर्विस में बदलें। main.ts खोलें:
import { 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.TCP, // या Redis, RabbitMQ\n options: {\n host: '0.0.0.0',\n port: 3001,\n },\n },\n );\n await app.listen();\n console.log('User microservice पोर्ट 3001 पर सुन रहा है');\n}\nbootstrap();\n\nहमने एक माइक्रोसर्विस बनाई है जो TCP पोर्ट 3001 पर सुनती है। अब app.controller.ts में एक मैसेज हैंडलर जोड़ें:
import { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\n\n@Controller()\nexport class AppController {\n @MessagePattern('get_user')\n getUser(@Payload() data: { id: number }) {\n // DB क्वेरी का अनुकरण\n return { id: data.id, name: 'Alice', email: 'alice@example.com' };\n }\n}\n\nबस! पहली माइक्रोसर्विस तैयार है। यह get_user पैटर्न के साथ मैसेज प्राप्त करती है और यूज़र डेटा लौटाती है।
चरण 2: दूसरी सर्विस बनाएं और संवाद स्थापित करें
\n\nएक और सर्विस बनाते हैं — order-service। यह user-service से डेटा का अनुरोध करेगी।