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