Giao diện Người xuất bản/ Người đăng ký tùy chỉnh

Để thêm hỗ trợ cho người xuất bản/ người đăng ký tùy chỉnh, bạn cần triển khai các giao diện message.Publishermessage.Subscriber.

Toàn bộ mã nguồn: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher interface {
    // Publish phát hành các thông điệp cung cấp đến chủ đề cụ thể.
    //
    // Publish có thể được thực thi đồng bộ hoặc bất đồng bộ, tùy thuộc vào cách triển khai.
    //
    // Hầu hết các triển khai người xuất bản không hỗ trợ việc phát hành thông điệp nguyên tử.
    // Điều này có nghĩa rằng nếu một thông điệp không thể được phát hành, thông điệp tiếp theo sẽ không được phát hành.
    //
    // Publish phải an toàn với luồng.
    Publish(topic string, messages ...*Message) error
    // Nếu người xuất bản là bất đồng bộ, Close nên xả những thông điệp chưa gửi đi.
    Close() error
}

// Subscriber là phần tiêu thụ của người xuất bản/ người đăng ký.
type Subscriber interface {
    // Subscribe trả về một kênh đầu ra cho các thông điệp nhận được từ chủ đề cung cấp.
    // Kênh sẽ đóng khi Close() được gọi trên người đăng ký.
    //
    // Để nhận thông điệp tiếp theo, cần gọi Ack() trên thông điệp nhận được.
    // Nếu xử lý thông điệp thất bại và thông điệp cần được gửi lại, nên gọi Nack().
    //
    // Khi ctx được hủy, người đăng ký sẽ đóng đăng ký và kênh đầu ra.
    // Ctx cung cấp được đặt trên tất cả các thông điệp được tạo ra.
    // Khi Nack hoặc Ack được gọi trên thông điệp, ngữ cảnh của thông điệp được hủy bỏ.
    Subscribe(ctx context.Context, topic string) (

Danh sách việc cần làm

Dưới đây là một số điểm bạn không nên quên:

  1. Ghi log (các thông điệp tốt và cấp độ phù hợp).
  2. Bộ mã hóa thông điệp có thể thay thế và cấu hình được.
  3. Việc triển khai của Close() cho người xuất bản và người đăng ký cần:
    • Độc lập với nhau
    • Có thể hoạt động đúng khi người xuất bản hoặc người đăng ký bị chặn (ví dụ, đang chờ Ack)
    • Có thể hoạt động đúng khi kênh đầu ra của người đăng ký bị chặn (vì không có ai nghe nó)
  4. Hỗ trợ cho Ack()Nack() cho các thông điệp đã tiêu thụ.
  5. Hỗ trợ cho việc gửi lại các thông điệp đã tiêu thụ bằng cách sử dụng Nack().
  6. Sử dụng kiểm tra người xuất bản/ người đăng ký chung. Bạn nên tham khảo hướng dẫn sửa lỗi kiểm tra để có những gợi ý sửa lỗi.
  7. Tối ưu hóa hiệu suất.
  8. Tài liệu GoDocs, Markdown và ví dụ giới thiệu.