رابط سفارشی ناشر/مشترک

برای اضافه کردن پشتیبانی از سفارشی کردن ناشر/مشترک، شما باید رابط‌های message.Publisher و message.Subscriber را پیاده‌سازی کنید.

کد منبع کامل: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher interface {
    // Publish پیام‌های ارائه شده را به موضوع مشخص شده منتشر می‌کند.
    //
    // منتشر کردن ممکن است به صورت همزمان یا ناهمزمان انجام شود، بسته به پیاده‌سازی.
    //
    // بیشتر پیاده‌سازی‌های ناشر پشتیبانی از منتشر کردن اتمی پیام‌ها را پشتیبانی نمی‌کنند.
    // این بدان معنی است که اگر یک پیام نتواند منتشر شود، پیام بعدی منتشر نخواهد شد.
    //
    // انتشار باید مقاوم نخ نیز باشد.
    Publish(topic string, messages ...*Message) error
    // اگر ناشر ناهمزمان است، باید Close ارسال پیام‌های ارسال نشده را پر کند.
    Close() error
}

// Subscriber بخش مصرفی ناشر/مشترک است.
type Subscriber interface {
    // Subscribe یک کانال خروجی برای پیام‌های دریافت شده از موضوع ارائه می‌دهد.
    // این کانال در صورت فراخوانی Close() بسته خواهد شد.
    //
    // برای دریافت پیام بعدی، باید Ack() روی پیام دریافت شده فراخوانی شود.
    // اگر پردازش پیام شکست بخورد و پیام باید دوباره تحویل داده شود، باید Nack() فراخوانی شود.
    //
    // هنگامی که ctx ارائه شده لغو می‌شود، مشترک اشتراک را بسته و کانال خروجی را بسته خواهد کرد.
    // ctx ارائه شده بر روی همه پیام‌های تولید شده تنظیم می‌شود.
    // زمانی که Nack یا Ack روی پیام فراخوانی می‌شود، متن پیام لغو می‌شود.
    Subscribe(ctx context.Context, topic string) (

لیست کار‌های انجام شده

اینجا چند نکته‌ای هست که نباید فراموش کنید:

  1. ثبت (پیام‌های خوب و سطوح مناسب).
  2. رمزگذاران پیام قابل تعویض و پیکربندی پذیر.
  3. پیاده‌سازی Close() برای ناشرها و مشترک‌ها باید:
    • متناظر
    • قادر به کار درستی باشد هنگامی که ناشر یا مشترک مسدود شده است (مانند انتظار برای Ack)
    • قادر به کار درستی باشد هنگامی که کانال خروجی مشترک مسدود شده است (زیرا هیچ کس برای گوش دادن به آن وجود ندارد)
  4. پشتیبانی از Ack() و Nack() برای پیام‌های مصرف شده.
  5. پشتیبانی از تحویل مجدد پیام‌های مصرفی با استفاده از Nack().
  6. استفاده از تست سفارشی ناشر/مشترک عمومی. شما باید به راهنمای رفع اشکال تست برای راهنمای رفع اشکال اشکال‌زدایی مراجعه کنید.
  7. بهینه‌سازی عملکرد.
  8. مستندات GoDocs، Markdown و مثال‌های مقدماتی.