"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تطوير الخدمات المصغرة باستخدام Spring Boot وSpring Cloud

تطوير الخدمات المصغرة باستخدام Spring Boot وSpring Cloud

تم النشر بتاريخ 2024-11-06
تصفح:989

Developing Microservices with Spring Boot and Spring Cloud

أصبحت هندسة الخدمات الصغيرة حلاً شائعًا لبناء أنظمة قابلة للتطوير وموحدة. باستخدام الخدمات الصغيرة، يمكنك تقسيم تطبيق متجانس إلى خدمات أصغر ومستقلة ومتخصصة، مما يجعل صيانة النظام وتطويره أسهل. في هذا المنشور، سنستكشف كيف يمكنك استخدام Spring Boot وSpring Cloud لإنشاء خدمات صغيرة قوية وفعالة.

مقدمة إلى الخدمات المصغرة
الفكرة الرئيسية وراء الخدمات الصغيرة هي تقسيم التطبيق إلى خدمات صغيرة يمكن تطويرها ونشرها وتوسيع نطاقها بشكل مستقل. يجب أن تكون كل خدمة صغيرة مسؤولة عن وظيفة محددة وتتواصل مع الخدمات الأخرى بطريقة خفيفة، عادةً باستخدام واجهات برمجة تطبيقات REST أو المراسلة.

تشمل بعض مزايا الخدمات المصغرة ما يلي:

  • قابلية التوسع المستقلة: يمكن توسيع نطاق كل خدمة بشكل منفصل.
  • النشر المستمر: يمكنك تحديث أو إصلاح خدمة صغيرة دون التأثير على الآخرين.
  • المرونة التكنولوجية: يمكن تنفيذ كل خدمة باستخدام تقنيات وأطر عمل مختلفة. الآن، دعونا نرى كيفية إنشاء وإدارة الخدمات الصغيرة باستخدام Spring Boot وSpring Cloud.

الآن، دعونا نرى كيفية إنشاء وإدارة الخدمات الصغيرة باستخدام Spring Boot وSpring Cloud.

إنشاء خدمات مصغرة باستخدام Spring Boot

يُسهل Spring Boot إنشاء الخدمات الصغيرة بفضل تركيزه على الحد الأدنى من التكوين وبدء التشغيل السريع. لنبدأ بإنشاء خدمتين صغيرتين: خدمة "المستخدمين" (خدمة المستخدم) وخدمة "الطلبات" (خدمة الطلب).

  1. إعداد مشروع Spring Boot

لإعداد خدمة صغيرة، يمكنك استخدام Spring Initializr لإنشاء مشروع جديد بالتبعيات التي تحتاجها، مثل Spring Web وSpring Data JPA. فيما يلي مثال أساسي لوحدة تحكم REST في خدمة المستخدم:

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity getUserById(@PathVariable Long id) {
        User user = new User(id, "Matheus");
        return ResponseEntity.ok(user);
    }
}

يمكن أن يكون لكل خدمة صغيرة قاعدة بيانات خاصة بها، مما يضمن استقلالية الخدمات وفصلها. بالنسبة لخدمة المستخدم، يمكننا استخدام التكوين مع H2 أو PostgreSQL، على سبيل المثال.

  1. الكشف عن واجهات برمجة تطبيقات REST تعرض كل خدمة صغيرة مواردها عبر REST APIs، مما يسمح للخدمات أو العملاء الآخرين باستهلاك وظائفها. فيما يلي مثال لنقطة النهاية في خدمة الطلب التي تستهلك واجهة برمجة التطبيقات الخاصة بخدمة المستخدم:
@RestController
@RequestMapping("/orders")
public class OrderController {

    private final RestTemplate restTemplate;

    public OrderController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/{id}")
    public ResponseEntity getOrderById(@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 أدوات إضافية لإدارة الاتصال ومرونة هذه الخدمات في بيئة موزعة. دعونا نغطي بعض المكونات الأساسية.

  1. خادم اكتشاف يوريكا أحد تحديات الخدمات الصغيرة هو اكتشاف الخدمة. Eureka هو خادم اكتشاف يسمح للخدمات بتسجيل نفسها واكتشاف خدمات أخرى دون الحاجة إلى عناوين URL ثابتة.
  • أضف تبعية خادم Spring-cloud-starter-netflix-eureka إلى خادم Eureka.
  • قم بتكوين ملف application.yml في كل من خدمة المستخدم وخدمة الطلب للتسجيل في خادم Eureka:
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

الآن، سيتم تسجيل الخدمات تلقائيًا في Eureka، مما يسهل عليهم اكتشاف بعضهم البعض.

  1. بوابة API مع بوابة Spring Cloud في بنية الخدمات الصغيرة، يعد وجود نقطة دخول واحدة لجميع الخدمات أمرًا ضروريًا. تعمل بوابة API كوسيط بين العميل والخدمات الصغيرة، حيث تقوم بتوجيه الطلبات بكفاءة.

أضف تبعية 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 تسريع عمليتك وضمان بنية قوية.

هل استمتعت بالتدوينة؟ إذا كان لديك أي أسئلة أو اقتراحات، اتركها في التعليقات! ولا تنس مشاركتها مع المطورين الآخرين الذين يمكنهم الاستفادة من هذه النصائح.

بيان الافراج يتم استنساخ هذه المقالة في: https://dev.to/matheusmartinello/developing-microservices-with-spring-boot-puring-cloud-5feh؟
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3