Pesan
Pesan adalah salah satu bagian inti dari Watermill. Pesan dipublikasikan oleh "pengirim" dan diterima oleh "pelanggan." Ketika memproses pesan, jika proses gagal, Anda harus mengirim Ack()
(menunjukkan pemrosesan berhasil) atau Nack()
(menunjukkan kegagalan pemrosesan).
Ack
dan Nack
dari pesan ditangani oleh pelanggan (dalam implementasi default, pelanggan akan menunggu Ack
atau Nack
).
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID adalah identifikasi unik dari pesan.
//
// Digunakan untuk debugging oleh Watermill.
// UUID bisa kosong.
UUID string
// Metadata berisi metadata dari pesan.
//
// Dapat digunakan untuk menyimpan data yang tidak perlu didekode dari seluruh muatan.
// Ini mirip dengan header permintaan HTTP.
//
// Metadata akan dimarshaling dan disimpan ke PubSub.
Metadata Metadata
// Payload adalah muatan dari pesan.
Payload Payload
// ack tertutup ketika penerimaan akhir diterima.
// noAck tertutup ketika penerimaan negatif diterima.
ack chan struct{}
noAck chan struct{}
ackMutex sync.Mutex
ackSentType ackType
ctx context.Context
}
// ...
Ack
Mengirim Ack
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Ack mengirimkan pengakuan untuk pesan.
//
// Ack tidak memblokir.
// Ack idempoten.
// Mengembalikan false jika Nack telah dikirimkan.
func (m *Message) Ack() bool {
// ...
Nack
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Nack mengirimkan pengakuan negatif untuk pesan.
//
// Nack tidak memblokir.
// Nack idempoten.
// Mengembalikan false jika Ack telah dikirimkan.
func (m *Message) Nack() bool {
// ...
Menerima Ack/Nack
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go
// ...
select {
case
Konteks
Pesan mengandung konteks perpustakaan standar, sama seperti permintaan HTTP.
Kode sumber lengkap: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Context mengembalikan konteks pesan. Untuk mengubah konteks, gunakan SetContext.
//
// Konteks yang dikembalikan selalu tidak nil; konteks default adalah konteks latar belakang.
func (m *Message) Context() context.Context {
if m.ctx != nil {
return m.ctx
}
return context.Background()
}
// SetContext mengatur konteks yang disediakan sebagai konteks pesan.
func (m *Message) SetContext(ctx context.Context) {
m.ctx = ctx
}
// ...