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