ผู้จัดจำหน่าย
รหัสแหล่งข้อมูลเต็ม: 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 เอง"