Nachricht
Die Nachricht ist einer der Kernbestandteile von Watermill. Nachrichten werden von "Veröffentlichern" veröffentlicht und von "Abonnenten" empfangen. Beim Verarbeiten von Nachrichten sollten Sie bei einem Verarbeitungsfehler ein Ack()
(als erfolgreiche Verarbeitung) oder ein Nack()
(als Verarbeitungsfehler) senden.
Das Ack
und Nack
der Nachricht werden von den Abonnenten behandelt (in der Standardimplementierung warten die Abonnenten auf Ack
oder Nack
).
Vollständiger Quellcode: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID ist der eindeutige Bezeichner der Nachricht.
//
// Er wird von Watermill für Debugging-Zwecke verwendet.
// UUID kann leer sein.
UUID string
// Metadaten enthält die Metadaten der Nachricht.
//
// Kann verwendet werden, um Daten zu speichern, die nicht aus dem gesamten Nutzinhalt dekodiert werden müssen.
// Es ist ähnlich wie HTTP-Header.
//
// Metadaten werden serialisiert und in PubSub gespeichert.
Metadata Metadata
// Payload ist der Nutzinhalt der Nachricht.
Payload Payload
// ack ist geschlossen, wenn eine Bestätigung empfangen wurde.
// noAck ist geschlossen, wenn eine negative Bestätigung empfangen wurde.
ack chan struct{}
noAck chan struct{}
ackMutex sync.Mutex
ackSentType ackType
ctx context.Context
}
// ...
Ack
Senden von Ack
Vollständiger Quellcode: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Ack sendet eine Bestätigung für die Nachricht.
//
// Ack blockiert nicht.
// Ack ist idempotent.
// Gibt false zurück, wenn bereits Nack gesendet wurde.
func (m *Message) Ack() bool {
// ...
Nack
Vollständiger Quellcode: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Nack sendet eine negative Bestätigung für die Nachricht.
//
// Nack blockiert nicht.
// Nack ist idempotent.
// Gibt false zurück, wenn bereits Ack gesendet wurde.
func (m *Message) Nack() bool {
// ...
Empfang von Ack/Nack
Vollständiger Quellcode: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go
// ...
select {
case
Kontext
Nachrichten enthalten den Kontext der Standardbibliothek, ähnlich wie bei einer HTTP-Anfrage.
Vollständiger Quellcode: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Context gibt den Kontext der Nachricht zurück. Verwenden Sie SetContext, um den Kontext zu ändern.
//
// Der zurückgegebene Kontext ist immer nicht-nil; standardmäßig ist der Hintergrundkontext.
func (m *Message) Context() context.Context {
if m.ctx != nil {
return m.ctx
}
return context.Background()
}
// SetContext setzt den bereitgestellten Kontext als den Kontext der Nachricht.
func (m *Message) SetContext(ctx context.Context) {
m.ctx = ctx
}
// ...