البنية المبنية على الأحداث تفصل الخدمات بالتواصل عبر الأحداث بدلاً من الاستدعاءات المباشرة.
المفاهيم الأساسية
الحدث: حقيقة أن شيئًا حدث
المنتج: يصدر الأحداث
المستهلك: يتفاعل مع الأحداث
الوسيط: يوجه الأحداث (RabbitMQ, Kafka, SQS)تطبيق أحداث Laravel
class OrderPlaced
{
public function __construct(
public readonly Order $order,
public readonly User $user,
) {}
}
class UpdateInventory implements ShouldQueue
{
public $tries = 3;
public $backoff = [10, 60, 300];
public function handle(OrderPlaced $event): void
{
foreach ($event->order->items as $item) {
Product::where('id', $item->product_id)
->decrement('stock', $item->quantity);
}
}
}
OrderPlaced::dispatch($order, $user);نمط CQRS
جانب الكتابة: التحقق → تحديث قاعدة البيانات → إصدار الأحداث
جانب القراءة: قراءة من نماذج محسّنة غير مُطبّعةالفوائد
- اقتران ضعيف — الخدمات لا تعرف عن بعضها
- قابلية التوسع — المستهلكون يتوسعون بشكل مستقل
- المرونة — المستهلكون الفاشلون يعيدون المحاولة
- سجل التدقيق — الأحداث توفر سجل نشاط طبيعي