رابط سفارشی ناشر/مشترک
برای اضافه کردن پشتیبانی از سفارشی کردن ناشر/مشترک، شما باید رابطهای 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) (
لیست کارهای انجام شده
اینجا چند نکتهای هست که نباید فراموش کنید:
- ثبت (پیامهای خوب و سطوح مناسب).
- رمزگذاران پیام قابل تعویض و پیکربندی پذیر.
- پیادهسازی
Close()
برای ناشرها و مشترکها باید:- متناظر
- قادر به کار درستی باشد هنگامی که ناشر یا مشترک مسدود شده است (مانند انتظار برای Ack)
- قادر به کار درستی باشد هنگامی که کانال خروجی مشترک مسدود شده است (زیرا هیچ کس برای گوش دادن به آن وجود ندارد)
- پشتیبانی از
Ack()
وNack()
برای پیامهای مصرف شده. - پشتیبانی از تحویل مجدد پیامهای مصرفی با استفاده از
Nack()
. - استفاده از تست سفارشی ناشر/مشترک عمومی. شما باید به راهنمای رفع اشکال تست برای راهنمای رفع اشکال اشکالزدایی مراجعه کنید.
- بهینهسازی عملکرد.
- مستندات GoDocs، Markdown و مثالهای مقدماتی.