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 استفاده کنید.
اصطلاحات مرتبط: رویداد، لسنر، منبعگذاری بر اساس رویداد، مسیج بروکر، صف پیام، الگوی صندوق خروجی تراکنشی، الگوی ساگا، آیدمپوتنسی.