Message

Le message est l'un des éléments essentiels de Watermill. Les messages sont publiés par des "éditeurs" et reçus par des "abonnés". Lors du traitement des messages, en cas d'échec du traitement, vous devez envoyer un Ack() (indiquant un traitement réussi) ou un Nack() (indiquant un échec de traitement).

Les Ack et Nack du message sont gérés par les abonnés (dans l'implémentation par défaut, les abonnés attendront un Ack ou un Nack).

Code source complet : github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID est l'identifiant unique du message.
	//
	// Il est utilisé pour le débogage par Watermill.
	// UUID peut être vide.
	UUID string

	// Metadata contient les métadonnées du message.
	//
	// Peut être utilisé pour stocker des données qui n'ont pas besoin d'être décodées à partir de la charge utile entière.
	// C'est similaire aux en-têtes de requête HTTP.
	//
	// Les métadonnées seront mises en forme et enregistrées dans PubSub.
	Metadata Metadata

	// Payload est la charge utile du message.
	Payload Payload

	// ack est fermé lorsqu'un accusé de réception est reçu.
	// noAck est fermé lorsqu'un accusé de réception négatif est reçu.
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Acknowledgement

Envoi de Ack

Code source complet : github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ack envoie un accusé de réception pour le message.
//
// Ack ne bloque pas.
// Ack est idempotent.
// Renvoie false si Nack a déjà été envoyé.
func (m *Message) Ack() bool {
// ...

Non-confirmation (Nack)

Code source complet : github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack envoie une non-confirmation pour le message.
//
// Nack ne bloque pas.
// Nack est idempotent.
// Renvoie false si Ack a déjà été envoyé.
func (m *Message) Nack() bool {
// ...

Réception de l'Ack/Nack

Code source complet : github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

Contexte

Les messages contiennent le contexte de la bibliothèque standard, tout comme une requête HTTP.

Code source complet : github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Contexte renvoie le contexte du message. Pour modifier le contexte, utilisez SetContext.
//
// Le contexte renvoyé est toujours non nul ; par défaut, c'est le contexte de fond.
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext définit le contexte fourni comme contexte du message.
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...