Mesaj

Mesaj, Watermill'in temel parçalarından biridir. Mesajlar "yayıncılar" tarafından yayınlanır ve "aboneler" tarafından alınır. Mesajları işlerken, işleme başarısız olursa, bir Ack() (başarılı işleme işaret eder) veya Nack() (işleme başarısızlık işareti) göndermelisiniz.

Mesajın Ack ve Nack işlemleri aboneler tarafından yönetilir (varsayılan uygulamada, aboneler Ack veya Nack bekleyecektir).

Tam kaynak kodu: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID, mesajın benzersiz tanımlayıcısıdır.
	//
	// Watermill tarafından hata ayıklamak için kullanılır.
	// UUID boş olabilir.
	UUID string

	// Metadata, mesajın meta verilerini içerir.
	//
	// Tüm veriyla kodlanmış olması gerekmez verileri depolamak için kullanılabilir.
	// HTTP isteği başlıklarına benzer.
	//
	// Meta verileri marshal edilir ve PubSub’a kaydedilir.
	Metadata Metadata

	// Payload, mesajın yüküdür.
	Payload Payload

	// bir onay alındığında kapatılır.
	// noAck negatif bir onay aldığında kapatılır.
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Onay (Ack)

Ack Gönderme

Tam kaynak kodu: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ack, mesaj için bir onay gönderir.
//
// Ack bloke etmez.
// Ack idempotenttir.
// Eğer daha önce Nack gönderilmişse false döner.
func (m *Message) Ack() bool {
// ...

Reddetme (Nack)

Tam kaynak kodu: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack, mesaj için negatif bir onay gönderir.
//
// Nack bloke etmez.
// Nack idempotenttir.
// Eğer daha önce Ack gönderilmişse false döner.
func (m *Message) Nack() bool {
// ...

Ack/Nack Alımı

Tam kaynak kodu: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

Bağlam (Context)

Mesajlar, HTTP isteği gibi standart kütüphanenin bağlamını içerir.

Tam kaynak kodu: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Bağlam, mesajın bağlamını döner. Bağlamı değiştirmek için SetContext kullanın.
//
// Döndürülen bağlam her zaman nil olmayan bir bağlamdır; varsayılan arkaplan bağlamıdır.
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext, sağlanan bağlamı mesajın bağlamı olarak ayarlar.
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...