ผู้จัดจำหน่าย

รหัสแหล่งข้อมูลเต็ม: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher interface {
	// Publish นำข้อมูลที่ให้มาไปโพสต์ในหัวข้อที่กำหนด
	//
	// การโพสต์อาจเป็นเดียวหรือไม่ละเอียด อันนี้ขึ้นอยู่กับการปรับใช้
	//
	// ส่วนใหญ่ของการปรับใช้ของผู้จัดจำหน่าย ไม่รองรับการโพสต์ข้อมูลแบบอะตอมิก ซึ่งหมายความว่าหากการโพสต์ของหนึ่งในข้อความล้มเหลว ข้อความถัดไปจะไม่ถูกโพสต์
	//
	// การโพสต์จะต้องประกอบด้วยการป้องกันการใช้งานแบบสองเส้น
	Publish(topic string, messages ...*Message) error
	// หากผู้จัดจำหน่ายเป็นแบบเดียวหรือไม่ละเอียด การปิดควรจะส่งออกข้อความที่ยังไม่ได้ถูกส่ง
	Close() error
}
// ...

การโพสต์หลายข้อความ

ส่วนใหญ่ของการปรับใช้ผู้จัดจำหน่าย ไม่รองรับการโพสต์ข้อมูลแบบอะตอมิก ซึ่งหมายความว่าหากการโพสต์ของหนึ่งในข้อความล้มเหลว ข้อความถัดไปจะไม่ถูกโพสต์

การโพสต์แบบเดียวหรือไม่ละเอียด

การโพสต์อาจเป็นเดียวหรือไม่ละเอียด อันนี้ขึ้นอยู่กับการปรับใช้

Close()

หากผู้จัดจำหน่ายเป็นแบบเดียวหรือไม่ละเอียด Close ควรจะส่งออกข้อความที่ยังไม่ได้ถูกส่ง อย่าลืมปิดตัวรับ มิฉะนั้น อาจสูญเสียข้อความบางส่วน

ผู้รับ

รหัสแหล่งข้อมูลเต็ม: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Subscriber interface {
	// Subscribe ส่งกลับช่องเอาต์พุตที่มีข้อความจากหัวข้อที่ให้มา
	// ช่องเอาต์พุตจะปิดเมื่อ `Close()` บนผู้รับถูกเรียก
	//
	// เพื่อรับข้อความถัดไป `Ack()` จะต้องถูกระบุไว้บนข้อความที่รับมา
	// หากระบบประมวลผลข้อความล้มเหลวและต้องการส่งมอมต่อ ควรมีการเรียกใช้ `Nack()`
	//
	// เมื่อข้อความจบสินใจนี้ถูกยกเลิกไป ผู้รับจะปิดการสมัครบริเวณและปิดช่องเอาต์พุต
	// ข้อความที่ถูกสร้างขึ้นทั้งหมดจะถูกตั้งค่าตามที่ระบุไว้ใน ctx
	// เมื่อ Ack หรือ Nack ถูกเรียกใช้บนข้อความ ข้อความนั้นจะถูกยกเลิก
	Subscribe(ctx context.Context, topic string) (
}

กลไก Ack/Nack

ผู้รับ รับผิดชอบการจัดการ Ack และ Nack จากข้อความ การปรับใช้ที่ถูกต้องควรรอคอย Ack หรือ Nack ก่อนที่จะบริโภคข้อความถัดไป

เคล็ดลับการปรับใช้ผู้รับที่สำคัญ: การส่ง Ack/offset ไปยังการจัดเก็บข้อความหรือตัวแทนหลังจาก Ack จากข้อความจาก Watermill นั้นสำคัญ มิฉะนั้น หากกระบวนการตายก่อนการประมวลผลข้อความ อาจสูญเสียข้อความได้

Close()

Close จะปิดการสมัครของทั้งหมดและช่องเอาต์พุตของพวกเขา และตัวขยับ offset อย่างจำเป็น (ถ้ามี)

การส่งมอบอย่างน้อยหนึ่งครั้ง

Watermill ถูกสร้างขึ้นโดยใช้เซมันติกการส่งมอบอย่างน้อยหนึ่งครั้ง นั้นหมายความว่าหากเกิดข้อผิดพลาดเมื่อประมวลผลข้อความและไม่สามารถส่ง Ack ข้อความจะถูกส่งมออมต่อ

คุณต้องจำไว้และสร้างแอปพลิเคชันของคุณเพื่อประมวลผลแบบอิเดมพฤทธิ์หรือมีกลไกลองลงพลิกกลับ

น่าเสียดายที่ไม่สามารถสร้างพ่อรีไมดเฟรมเวรสวาร์ แต่เรายังสนับสนุนให้คุณสร้างการปรับใช้ของคุณเอง

การทดสอบทั่วไป

ทุก Pub/Sub มีลักษณะที่คล้ายคลึงกันในด้านส่วนมาก โดยเราสร้างชุดทดสอบที่ทุก Pub/Sub ควรผ่านได้

ชุดทดสอบเหล่านี้สามารถหาได้ใน pubsub/tests/test_pubsub.go

การปรับใช้มาตราฐาน

เพื่อตรวจสอบการปรับใช้ Pub/Sub ที่พร้อมใช้งานโปรดอ้างถึง Pub/Sub ที่สนับสนุน

การปรับใช้ Pub/Sub เอง

สำหรับคำแนะนำในการใส่ระบบสนับสนุนสำหรับ Pub/Sub ใหม่โปรดอ้างถึง "การปรับใช้ Pub/Sub เอง"