อินเทอร์เฟซแบบกำหนดเองสำหรับการได้รับและส่งข้อมูล

เพื่อเพิ่มการสนับสนุนสำหรับการได้รับและส่งข้อมูลแบบกำหนดเอง คุณต้องนำไปสู่การปฏิบัติ 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) (

รายการหน้าที่ต้องทำ

นี่คือบางจุดที่คุณไม่ควรลืม:

  1. การบันทึก (ข้อความที่ดีและระดับที่เหมาะสม)

  2. ตัวเข้ารหัสข้อความที่สามารถแทนที่และปรับเปลี่ยนได้

  3. การนำไปสู่การปฏิบัติของ "ปิด"

    • ต้องสามารถทำงานได้แม้จะถูกบล้อกไว้ (ตัวส่งหรือตัวรับถูกบล้อกไว้ เช่น การรอ Ack)
    • ต้องสามารถทำงานได้เมื่อช่องส่งของตัวรับถูกบล้อกไว้ (เพราะไม่มีผู้ฟัง)
  4. การสนับสนุน Ack และ Nack สำหรับข้อความที่ถูกบริโภค

  5. การสนับสนุนการส่งข้อความที่ถูกบริโภคเป็นการทำซ้ำโดยการใช้งาน Nack()

  6. ใช้การทดสอบ "ตัวส่งข้อมูลและตัวรับข้อมูลสากล" คุณควรต้องอ้างถึงคำแนะนำการแก้ไขปัญหาในการทดสอบ

  7. การปรับปรุงประสิทธิภาพ

  8. คู่มือการใช้โกด็อค, โมดิเดฉบคำอธิบายและตัวอย่างการใช้งาน