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
}
// ...