जावा में माइक्रोसर्विसेज़: आर्किटेक्चर और प्रैक्टिस A से Z तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में माइक्रोसर्विसेज़: आर्किटेक्चर और प्रैक्टिस A से Z तक

\n\n

माइक्रोसर्विसेज़ आर्किटेक्चर (MSA) आधुनिक स्केलेबल एप्लिकेशन बनाने के लिए डी-फैक्टो मानक बन गया है। मोनोलिथ के विपरीत, जहां सारा कोड एक बड़ी प्रक्रिया होती है, माइक्रोसर्विसेज़ सिस्टम को छोटी, स्वतंत्र रूप से डिप्लॉय की जाने वाली सेवाओं में विभाजित करते हैं। इस लेख में, हम जानेंगे कि लोकप्रिय तकनीकों: Spring Boot, Docker, Kafka और Spring Cloud का उपयोग करके जावा में माइक्रोसर्विसेज़ को कैसे डिज़ाइन और कार्यान्वित किया जाए। आपको तैयार रेसिपी और कोड उदाहरण मिलेंगे।

\n\n

1. जावा में माइक्रोसर्विसेज़ आर्किटेक्चर के मूल सिद्धांत

\n\n

कोड लिखने से पहले, MSA के प्रमुख सिद्धांतों को समझना महत्वपूर्ण है:

\n
    \n
  • एकल जिम्मेदारी (Single Responsibility) — प्रत्येक सेवा एक व्यावसायिक कार्य के लिए जिम्मेदार है (उदाहरण के लिए, ऑर्डर सेवा, उपयोगकर्ता सेवा)।
  • \n
  • स्वतंत्र डिप्लॉयमेंट — आप पूरे सिस्टम को पुनरारंभ किए बिना एक सेवा को अपडेट कर सकते हैं।
  • \n
  • विकेंद्रीकृत डेटा प्रबंधन — प्रत्येक सेवा का अपना डेटाबेस होता है (Database per Service)।
  • \n
  • ढीला युग्मन (Loose Coupling) — सेवाएं हल्के प्रोटोकॉल (REST, gRPC, मैसेज क्यू) के माध्यम से संवाद करती हैं।
  • \n
\n\n

जावा के लिए मुख्य फ्रेमवर्क Spring Boot है, जो Spring Cloud (सर्विस डिस्कवरी, कॉन्फ़िगरेशन, API गेटवे के लिए) के साथ जुड़ा है। आइए एक माइक्रोसर्विस का न्यूनतम उदाहरण देखें।

\n\n

उदाहरण: Spring Boot पर एक सरल REST सेवा

\n
// pom.xml (डिपेंडेंसी का अंश)\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n\n// UserServiceApplication.java\n@SpringBootApplication\npublic class UserServiceApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(UserServiceApplication.class, args);\n    }\n}\n\n// UserController.java\n@RestController\n@RequestMapping("/api/users")\npublic class UserController {\n\n    @GetMapping("/{id}")\n    public ResponseEntity<String> getUser(@PathVariable Long id) {\n        // वास्तविक प्रोजेक्ट में यहां रिपॉजिटरी कॉल होगा\n        return ResponseEntity.ok("User with id: " + id);\n    }\n}
\n\n

यह माइक्रोसर्विस पोर्ट 8080 पर सुनता है और GET अनुरोध का जवाब देता है। दूसरी सेवा (जैसे, ऑर्डर सेवा) चलाने के लिए, बस एक और Spring Boot प्रोजेक्ट बनाएं जिसमें अलग पोर्ट (server.port=8081) हो।

\n\n

2. प्रैक्टिस: Docker, Kafka और अंतर-सेवा संचार

\n\n

वास्तविक सिस्टम में, माइक्रोसर्विसेज़ ऑर्केस्ट्रेशन के बिना सीधे HTTP पर संवाद नहीं कर सकते। दो दृष्टिकोणों का उपयोग किया जाता है: सिंक्रोनस (REST/Feign) और एसिंक्रोनस (Message Broker)।

\n\n

2.1. Docker के साथ कंटेनरीकरण

\n

प्रत्येक माइक्रोसर्विस को Docker इमेज में पैक किया जाता है। Java सेवा के लिए Dockerfile का उदाहरण:

\n
FROM openjdk:17-jdk-slim\nCOPY target/user-service-0.0.1-SNAPSHOT.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "/app.jar"]
\n

फिर सभी सेवाओं को एक साथ चलाने के लिए docker-compose.yml का उपयोग करें:

\n
version: '3.8'\nservices:\n  user-service:\n    build: ./user-service\n    ports:\n      - "8080:8080"\n  order-service:\n    build: ./order-service\n    ports:\n      - "8081:8081"\n  postgres:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: mydb\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: pass
\n\n

2.2. Apache Kafka के माध्यम से एसिंक्रोनस संचार

\n

जब किसी सेवा को अन्य सेवाओं को किसी घटना (जैसे, "ऑर्डर बनाया गया") के बारे में सूचित करने की आवश्यकता होती है, तो Kafka का उपयोग करना बेहतर होता है। यह सेवाओं को अलग करता है और दोष सहनशीलता बढ़ाता है।

\n\n

प्रोड्यूसर का उदाहरण (Order Service इवेंट भेजता है):

\n
// KafkaProducerConfig.java\n@Configuration\npublic class KafkaProducerConfig {\n    @Bean\n    public ProducerFactory<String, String> producerFactory() {\n        Map<String, Object> props = new Ha                

ब्लॉग

पुस्तक अनुशंसाएँ