Event-Driven Architecture یا معماری رویدادمحور روشی برای طراحی سیستم است که اجزا با انتشار و دریافت رویداد با یکدیگر تعامل می‌کنند. رویداد وقوع یک اتفاق را گزارش می‌کند، مثل OrderPaid، نه اینکه لزوماً فرمان مستقیم انجام یک کار باشد.

مثال فروشگاه: پرداخت موفق سفارش

سرویس پرداخت پس از ثبت پایدار تراکنش رویداد OrderPaid را منتشر می‌کند. سرویس انبار موجودی را تغییر می‌دهد، سامانه اعلان پیام ارسال می‌کند و سرویس تحلیل رویداد را برای گزارش ثبت می‌کند. هر مصرف‌کننده مسئول قواعد خطا و تکرارپذیری خودش است.

جزءمسئولیتنکته
Producerایجاد رویداد OrderPaidانتشار پس از ثبت وضعیت معتبر
Brokerانتقال پیامبافر، Ack و Retry براساس ابزار
Inventory Listenerرزرو یا کاهش موجودیآیدمپوتنت بودن عملیات
Notification Workerارسال اعلانامکان Retry و DLQ
Analytics Consumerثبت تحلیلپذیرش تاخیر در پردازش

نمونه با Laravel Event و Listener

// Event published after successful payment
event(new OrderPaid($order));

use Illuminate\Contracts\Queue\ShouldQueue;
class SendReceipt implements ShouldQueue {
    public function handle(OrderPaid $event): void {
        // Dispatch email using an idempotent message ID
    }
}

نمونه با Python و RabbitMQ

import json, pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='orders', exchange_type='fanout', durable=True)
channel.basic_publish(exchange='orders', routing_key='',
    body=json.dumps({'type': 'OrderPaid', 'order_id': 42}),
    properties=pika.BasicProperties(delivery_mode=2))
connection.close()

انتخاب‌های معماری

Event Notification و Event-Carried State Transfer دو سبک متفاوت‌اند. رویداد می‌تواند فقط شناسه سفارش را اعلام کند یا Snapshot داده موردنیاز مصرف‌کننده را همراه ببرد. اولی وابستگی به API خواندن ایجاد می‌کند و دومی مدیریت تغییر اسکیما را مهم‌تر می‌کند.

نکته فنی

Dual Write یعنی ثبت تراکنش در دیتابیس و ارسال پیام به‌صورت جدا می‌تواند ناسازگاری ایجاد کند. در سیستم حساس از الگوهایی مانند Transactional Outbox استفاده کنید.

اصطلاحات مرتبط: رویداد، لسنر، منبع‌گذاری بر اساس رویداد، مسیج بروکر، صف پیام، الگوی صندوق خروجی تراکنشی، الگوی ساگا، آیدمپوتنسی.