Messaggio

Il messaggio è una delle parti centrali di Watermill. I messaggi vengono pubblicati dai "publishers" e ricevuti dai "subscribers". Durante l'elaborazione dei messaggi, se l'elaborazione fallisce, è necessario inviare un Ack() (indicando un'elaborazione riuscita) o un Nack() (indicando un fallimento dell'elaborazione).

L'Ack e il Nack del messaggio sono gestiti dai subscribers (nell'implementazione predefinita, i subscribers attendono l'Ack o il Nack).

Codice sorgente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID è l'identificatore univoco del messaggio.
	//
	// Viene utilizzato per il debug da parte di Watermill.
	// UUID può essere vuoto.
	UUID string

	// Metadata contiene i metadati del messaggio.
	//
	// Può essere utilizzato per memorizzare dati che non è necessario decodificare dall'intero payload.
	// È simile agli header della richiesta HTTP.
	//
	// I metadati verranno marshaled e salvati su PubSub.
	Metadata Metadata

	// Payload è il payload del messaggio.
	Payload Payload

	// ack si chiude quando viene ricevuto un'accettazione.
	// noAck si chiude quando viene ricevuta un'accettazione negativa.
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Accettazione (Ack)

Invio dell'Ack

Codice sorgente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ack invia un'accettazione per il messaggio.
//
// Ack non blocca.
// Ack è idempotente.
// Restituisce false se un Nack è già stato inviato.
func (m *Message) Ack() bool {
// ...

Rifiuto (Nack)

Codice sorgente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack invia un rifiuto per il messaggio.
//
// Nack non blocca.
// Nack è idempotente.
// Restituisce false se un Ack è già stato inviato.
func (m *Message) Nack() bool {
// ...

Ricezione dell'Ack/Nack

Codice sorgente completo: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

Contesto (Context)

I messaggi contengono il contesto della libreria standard, proprio come una richiesta HTTP.

Codice sorgente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Context restituisce il contesto del messaggio. Per cambiare il contesto, usare SetContext.
//
// Il contesto restituito è sempre non nullo; di default è il contesto di background.
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext imposta il contesto fornito come contesto del messaggio.
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...