Files
java-design-patterns/localization/ar/aggregator-microservices

title, shortTitle, category, language, tag
title shortTitle category language tag
Aggregator Microservices Aggregator Microservices Architectural ar
Cloud distributed
Decoupling
Microservices

الهدف

يقوم المستخدم بإجراء مكالمة واحدة إلى خدمة المجمع، ومن ثم يقوم المجمع بالاتصال بكل خدمة ميكروسيرفيس ذات صلة.

الشرح

مثال من العالم الواقعي

يحتاج سوقنا الإلكتروني إلى معلومات حول المنتجات والمخزون الحالي. يقوم بإجراء مكالمة إلى خدمة المجمع التي بدورها تتصل بخدمة ميكروسيرفيس المعلومات الخاصة بالمنتج وخدمة ميكروسيرفيس المخزون للمنتج التي تعيد المعلومات مجمعة.

ببساطة

يقوم ميكروسيرفيس المجمع بجمع البيانات من عدة ميكروسيرفيسات ويعيد النتيجة مجمعة لمعالجتها.

يقول StackOverflow

يقوم ميكروسيرفيس المجمع بالاتصال بعدة خدمات لتحقيق الوظيفة المطلوبة من التطبيق.

مثال برمجي

لنبدأ بنموذج البيانات. هنا هو Product.

public class Product {
  private String title;
  private int productInventories;
  // getters and setters ->
  ...
}

بعد ذلك، يمكننا تقديم ميكروسيرفيسنا Aggregator (مجمع الميكروسيرفيسات). يحتوي على ProductInformationClient (عميل معلومات المنتج) و ProductInventoryClient (عميل مخزون المنتج) للاتصال بالميكروسيرفيسات المعنية.

@RestController
public class Aggregator {

  @Resource
  private ProductInformationClient informationClient;

  @Resource
  private ProductInventoryClient inventoryClient;

  @RequestMapping(path = "/product", method = RequestMethod.GET)
  public Product getProduct() {

    var product = new Product();
    var productTitle = informationClient.getProductTitle();
    var productInventory = inventoryClient.getProductInventories();

    //Fallback to error message
    product.setTitle(requireNonNullElse(productTitle, "Error: Fetching Product Title Failed"));

    //Fallback to default error inventory
    product.setProductInventories(requireNonNullElse(productInventory, -1));

    return product;
  }
}

هذه هي جوهر تنفيذ الميكروسيرفيسات للمعلومات. ميكروسيرفيس المخزون مشابه، ببساطة يعيد عدد المخزون.

@RestController
public class InformationController {
  @RequestMapping(value = "/information", method = RequestMethod.GET)
  public String getProductTitle() {
    return "The Product Title.";
  }
}

الآن عند استدعاء واجهة برمجة التطبيقات REST الخاصة بنا Aggregator تُرجع معلومات المنتج.

curl http://localhost:50004/product
{"title":"The Product Title.","productInventories":5}

مخطط الفئة

alt text

قابلية التطبيق

استخدم نمط تجميع الميكروسيرفيسات (Aggregator Microservices) عندما تحتاج إلى واجهة برمجة تطبيقات موحدة لعدة ميكروسيرفيسات، بغض النظر عن جهاز العميل.

الشكر