อินเทอร์เฟซแบบกำหนดเองสำหรับการได้รับและส่งข้อมูล
เพื่อเพิ่มการสนับสนุนสำหรับการได้รับและส่งข้อมูลแบบกำหนดเอง คุณต้องนำไปสู่การปฏิบัติ message.Publisher
และ message.Subscriber
อินเทอร์เฟซ
รหัสฟ้อน เต็ม: github.com/ThreeDotsLabs/watermill/message/pubsub.go
// ...
type Publisher interface {
// Publish ส่งข้อมูลที่ให้มาแล้วไปยังหัวข้อที่ระบุ
//
// การส่งข้อมูลสามารถทำงานเป็นการสะสมหรือโดยไม่สะสม ขึ้นอยู่กับการปฏิบัติ
//
// ส่วนใหญ่ของการปฏิบัติการตัวส่งข้อมูลนั้นไม่รองรับการส่งข้อมูลแบบอะตอม
// นั่นหมายความว่าหากข้อความหนึ่งไม่สามารถทำการส่ง ข้อความถัดไปจะไม่ถูกส่ง
//
// การส่งข้อมูลต้องป้องกันการเกิดข้อผิดพลาดในการใช้งานพร้อมอื่น ๆ
Publish(topic string, messages ...*Message) error
// หากตัวส่งข้อมูลทำงานเป็นการส่งข้อมูลแบบไม่ระบุเวลา การปิดต้องทำให้ข้อความที่ยังไม่ได้ถูกส่งไปเสียบายในวัน
Close() error
}
// ข้อมูลที่ถูกบริโภค
type Subscriber interface {
// การสนับสนุนในการติดตามเพื่อรับข้อมูลที่ได้รับมาจากหัวข้อที่ให้มา
// ช่องส่งออกนั้นจะปิดเมื่อการทำการปิดต่อองช่อง
// เมื่อต้องการรับข้อความถัดไป จะต้องมีการเรียกใช้ Ack ที่ได้รับข้อความ
// หากการปฏิบัติรันจบและข้อความต้องการถูกส่งอีก Nack จะถูกเรียกใช้
// เมื่อนำมาใช้ เมี่ยง Cancelled ตัวจัดการต่อข้อความนั้น
Subscribe(ctx context.Context, topic string) (
รายการหน้าที่ต้องทำ
นี่คือบางจุดที่คุณไม่ควรลืม:
-
การบันทึก (ข้อความที่ดีและระดับที่เหมาะสม)
-
ตัวเข้ารหัสข้อความที่สามารถแทนที่และปรับเปลี่ยนได้
-
การนำไปสู่การปฏิบัติของ "ปิด"
- ต้องสามารถทำงานได้แม้จะถูกบล้อกไว้ (ตัวส่งหรือตัวรับถูกบล้อกไว้ เช่น การรอ Ack)
- ต้องสามารถทำงานได้เมื่อช่องส่งของตัวรับถูกบล้อกไว้ (เพราะไม่มีผู้ฟัง)
-
การสนับสนุน Ack และ Nack สำหรับข้อความที่ถูกบริโภค
-
การสนับสนุนการส่งข้อความที่ถูกบริโภคเป็นการทำซ้ำโดยการใช้งาน Nack()
-
ใช้การทดสอบ "ตัวส่งข้อมูลและตัวรับข้อมูลสากล" คุณควรต้องอ้างถึงคำแนะนำการแก้ไขปัญหาในการทดสอบ
-
การปรับปรุงประสิทธิภาพ
-
คู่มือการใช้โกด็อค, โมดิเดฉบคำอธิบายและตัวอย่างการใช้งาน