أصبحت هندسة الخدمات الصغيرة حلاً شائعًا لبناء أنظمة قابلة للتطوير وموحدة. باستخدام الخدمات الصغيرة، يمكنك تقسيم تطبيق متجانس إلى خدمات أصغر ومستقلة ومتخصصة، مما يجعل صيانة النظام وتطويره أسهل. في هذا المنشور، سنستكشف كيف يمكنك استخدام Spring Boot وSpring Cloud لإنشاء خدمات صغيرة قوية وفعالة.
مقدمة إلى الخدمات المصغرة
الفكرة الرئيسية وراء الخدمات الصغيرة هي تقسيم التطبيق إلى خدمات صغيرة يمكن تطويرها ونشرها وتوسيع نطاقها بشكل مستقل. يجب أن تكون كل خدمة صغيرة مسؤولة عن وظيفة محددة وتتواصل مع الخدمات الأخرى بطريقة خفيفة، عادةً باستخدام واجهات برمجة تطبيقات REST أو المراسلة.
تشمل بعض مزايا الخدمات المصغرة ما يلي:
الآن، دعونا نرى كيفية إنشاء وإدارة الخدمات الصغيرة باستخدام Spring Boot وSpring Cloud.
يُسهل Spring Boot إنشاء الخدمات الصغيرة بفضل تركيزه على الحد الأدنى من التكوين وبدء التشغيل السريع. لنبدأ بإنشاء خدمتين صغيرتين: خدمة "المستخدمين" (خدمة المستخدم) وخدمة "الطلبات" (خدمة الطلب).
لإعداد خدمة صغيرة، يمكنك استخدام Spring Initializr لإنشاء مشروع جديد بالتبعيات التي تحتاجها، مثل Spring Web وSpring Data JPA. فيما يلي مثال أساسي لوحدة تحكم REST في خدمة المستخدم:
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public ResponseEntitygetUserById(@PathVariable Long id) { User user = new User(id, "Matheus"); return ResponseEntity.ok(user); } }
يمكن أن يكون لكل خدمة صغيرة قاعدة بيانات خاصة بها، مما يضمن استقلالية الخدمات وفصلها. بالنسبة لخدمة المستخدم، يمكننا استخدام التكوين مع H2 أو PostgreSQL، على سبيل المثال.
@RestController @RequestMapping("/orders") public class OrderController { private final RestTemplate restTemplate; public OrderController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/{id}") public ResponseEntitygetOrderById(@PathVariable Long id) { User user = restTemplate.getForObject("http://user-service/users/" id, User.class); Order order = new Order(id, user, "Order details"); return ResponseEntity.ok(order); } }
يتم استخدام RestTemplate لتقديم طلبات HTTP بين الخدمات الصغيرة.
إدارة الخدمات المصغرة باستخدام Spring Cloud
بينما يساعد Spring Boot في إنشاء خدمات صغيرة بسرعة، يوفر Spring Cloud أدوات إضافية لإدارة الاتصال ومرونة هذه الخدمات في بيئة موزعة. دعونا نغطي بعض المكونات الأساسية.
eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
الآن، سيتم تسجيل الخدمات تلقائيًا في Eureka، مما يسهل عليهم اكتشاف بعضهم البعض.
أضف تبعية Spring-cloud-starter-gateway لإنشاء بوابة بسيطة:
spring: cloud: gateway: routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/users/** - id: order-service uri: lb://ORDER-SERVICE predicates: - Path=/orders/**
بهذا، سيتم توجيه أي طلب يتم تقديمه إلى /users/** إلى خدمة المستخدم، وينطبق الشيء نفسه على /orders/**.
3.** المرونة مع قاطع الدائرة (Hystrix)**
في بيئة الخدمات الصغيرة، يعد الفشل أمرًا لا مفر منه. Hystrix عبارة عن قاطع دائرة يعمل على حماية الخدمات من التحميل الزائد عن طريق عزل حالات الفشل. فيما يلي مثال لكيفية تطبيقه على طريقة تستهلك خدمة أخرى:
@HystrixCommand(fallbackMethod = "fallbackGetUser") public User getUser(Long id) { return restTemplate.getForObject("http://user-service/users/" id, User.class); } public User fallbackGetUser(Long id) { return new User(id, "Default User"); }
إذا فشلت خدمة المستخدم، فسيتم استدعاء الأسلوب الاحتياطي GetUser، مما يضمن بقاء النظام فعالاً.
يوفر Spring Boot، جنبًا إلى جنب مع Spring Cloud، بنية تحتية ممتازة لتطوير خدمات صغيرة مرنة وقابلة للتطوير. مع ميزات مثل اكتشاف الخدمة، والتوجيه، وإدارة الفشل، سيكون تطبيقك مستعدًا جيدًا للعمل في بيئة موزعة وديناميكية.
سواء كنت تنتقل من تطبيق متجانس إلى خدمات صغيرة أو تبدأ من الصفر، يمكن لـ Spring Boot وSpring Cloud تسريع عمليتك وضمان بنية قوية.
هل استمتعت بالتدوينة؟ إذا كان لديك أي أسئلة أو اقتراحات، اتركها في التعليقات! ولا تنس مشاركتها مع المطورين الآخرين الذين يمكنهم الاستفادة من هذه النصائح.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3