الناشر

الشفرة الكاملة المصدر: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher interface {
	// Publish يقوم بنشر الرسائل المقدمة إلى الموضوع المحدد.
	//
	// يمكن أن يكون النشر متزامنًا أو غير متزامن - يعتمد ذلك على التنفيذ.
	//
	// معظم تنفيذات الناشر لا تدعم النشر الذري للرسالة.
	// يعني هذا أنه إذا فشل نشر إحدى الرسائل، فإن الرسالة التالية لن تُنشر.
	//
	// يجب أن يكون النشر آمنًا للموضوعات المتعددة.
	Publish(topic string, messages ...*Message) error
	// إذا كان الناشر غير متزامن، يجب أن يتم إغلاق `Close` لفرغ الرسائل غير المرسلة.
	Close() error
}
// ...

نشر عدة رسائل

معظم تنفيذات الناشر لا تدعم النشر الذري للرسالة. هذا يعني أنه إذا فشل نشر إحدى الرسائل، فإن الرسالة التالية لن تُنشر.

النشر غير المتزامن

يمكن أن يكون النشر متزامنًا أو غير متزامن - يعتمد ذلك على التنفيذ.

Close()

إذا كان الناشر غير متزامن، يجب أن يتم إغلاق Close لفرغ الرسائل غير المرسلة. لا تنسى إغلاق المشتركين. وإلا، قد تفقد بعض الرسائل.

المشترك

الشفرة الكاملة المصدر: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Subscriber interface {
	// Subscribe يعيد قناة الإخراج مع الرسائل من الموضوع المقدم.
	// سيتم إغلاق القناة عند استدعاء `Close()` على المشترك.
	//
	// لاستقبال الرسالة التالية، يجب استدعاء `Ack()` على الرسالة المستلمة.
	// إذا فشلت معالجة الرسالة وكان يجب إعادة تقديم الرسالة، يجب استدعاء `Nack()`.
	//
	// عند إلغاء السياق المقدم، سيقوم المشترك بإغلاق الاشتراك وإغلاق القناة الناتجة.
	// يتم تعيين السياق المقدم لجميع الرسائل المولدة.
	// عندما يتم استدعاء Ack أو Nack على الرسالة، سيتم إلغاء سياق الرسالة.
	Subscribe(ctx context.Context, topic string) (
}

آليات Ack/Nack

المشتركون مسؤولون عن التعامل مع Ack و Nack من الرسائل. يجب أن تنتظر التنفيذ الصحيح لـ Ack أو Nack قبل استهلاك الرسالة التالية.

نصيحة تنفيذ المشترك المهمة: من الأمور الحاسمة إرسال Ack/الإزاحة إلى تخزين/وكيل الرسالة بعد Ack من رسالة Watermill. وإلا، إذا مات العملية قبل معالجة الرسالة، هناك احتمالية فقدان الرسالة.

Close()

Close سيُغلق كافة الاشتراكات وقنوات الإخراج الخاصة بها، ويفرغ الإزاحات إن لزم الأمر.

توصيل مرة واحدة على الأقل

تم بناء Watermill باستخدام مفاهيم توصيل مرة واحدة على الأقل. هذا يعني أنه إذا حدث خطأ عند معالجة رسالة ولم يكن من الممكن إرسال Ack، سيتم إعادة تقديم الرسالة.

يجب عليك أن تأخذ هذا في الاعتبار وبناء تطبيقك لمعالجة متكررة أو تنفيذ آلية إعادة المحاولة.

عذرًا، إنشاء وسيط إعادة محاولة عام ليس ممكنًا، لذا نشجعك على بناء تنفيذك الخاص.

الاختبار العام

كل نشر/اشتراك متشابه بمعظم جوانبه. لتجنب كتابة اختبارات منفصلة لكل تنفيذ نشر/اشتراك، قمنا بإنشاء مجموعة اختبار تجريبية يجب أن تمر بها أي تنفيذ نشر/اشتراك.

يمكن العثور على هذه الاختبارات في pubsub/tests/test_pubsub.go.

التنفيذ المدمج

للتحقق من تنفيذات نشر/اشتراك المتاحة، يرجى الرجوع إلى نشر/اشتراك مدعومة.

تنفيذ نشر/اشتراك مخصص

للحصول على تعليمات حول دعم نشر/اشتراك جديد، يرجى الرجوع إلى "تنفيذ نشر/اشتراك مخصص".