Antarmuka Penerbit/Pelanggan Kustom
Untuk menambahkan dukungan untuk penerbit/pelanggan kustom, Anda perlu mengimplementasikan antarmuka message.Publisher
dan message.Subscriber
.
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/message/pubsub.go
// ...
type Publisher interface {
// Publish menerbitkan pesan yang disediakan ke topik yang ditentukan.
//
// Publish dapat dieksekusi secara sinkron atau asinkron, tergantung pada implementasinya.
//
// Sebagian besar implementasi penerbit tidak mendukung penerbitan pesan atomik.
// Ini berarti jika satu pesan gagal untuk diterbitkan, pesan berikutnya tidak akan diterbitkan.
//
// Publish harus aman untuk penggunaan dalam thread.
Publish(topic string, messages ...*Message) error
// Jika penerbitnya asinkron, Close harus membuang pesan yang belum dikirim.
Close() error
}
// Subscriber adalah bagian pengonsumsi dari penerbit/pelanggan.
type Subscriber interface {
// Subscribe mengembalikan saluran keluaran untuk pesan yang diterima dari topik yang disediakan.
// Saluran akan ditutup ketika Close() dipanggil pada pelanggan.
//
// Untuk menerima pesan berikutnya, Ack() harus dipanggil pada pesan yang diterima.
// Jika pemrosesan pesan gagal dan pesan harus dikirim ulang, harus dipanggil Nack().
//
// Ketika ctx yang diberikan dibatalkan, pelanggan akan menutup langganan dan saluran keluaran.
// ctx yang diberikan diatur pada semua pesan yang dihasilkan.
// Ketika Nack atau Ack dipanggil pada pesan, konteks pesan tersebut dibatalkan.
Subscribe(ctx context.Context, topic string) (
Daftar Tugas
Berikut adalah beberapa hal yang tidak boleh Anda lupakan:
- Logging (pesan yang baik dan tingkat yang sesuai).
- Pemutar ulang dan pengkode pesan yang dapat dikonfigurasi.
- Implementasi
Close()
untuk penerbit dan pelanggan harus:- Idempoten
- Dapat bekerja dengan benar ketika penerbit atau pelanggan terblokir (misalnya, menunggu Ack)
- Dapat bekerja dengan benar ketika saluran keluaran pelanggan terblokir (karena tidak ada yang mendengarkannya)
- Mendukung
Ack()
danNack()
untuk pesan yang dikonsumsi. - Mendukung pengiriman ulang pesan yang dikonsumsi menggunakan
Nack()
. - Gunakan pengujian penerbit/pelanggan generik. Anda harus merujuk ke panduan perbaikan masalah pengujian untuk tips debugging.
- Optimisasi kinerja.
- GoDocs, dokumentasi Markdown, dan contoh pengantar.