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