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.Publisher
và message.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:
- Ghi log (các thông điệp tốt và cấp độ phù hợp).
- Bộ mã hóa thông điệp có thể thay thế và cấu hình được.
- 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ó)
- Hỗ trợ cho
Ack()
vàNack()
cho các thông điệp đã tiêu thụ. - 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()
. - 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.
- Tối ưu hóa hiệu suất.
- Tài liệu GoDocs, Markdown và ví dụ giới thiệu.