Mensagem
A mensagem é uma das partes principais do Watermill. As mensagens são publicadas por "editores" e recebidas por "assinantes". Ao processar mensagens, se o processamento falhar, você deve enviar um Ack()
(indicando processamento bem-sucedido) ou um Nack()
(indicando falha no processamento).
O Ack
e Nack
da mensagem são tratados pelos assinantes (na implementação padrão, os assinantes aguardarão o Ack
ou Nack
).
Código fonte completo: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID é o identificador único da mensagem.
//
// É usado para depuração pelo Watermill.
// UUID pode estar vazio.
UUID string
// Metadata contém os metadados da mensagem.
//
// Pode ser usado para armazenar dados que não precisam ser decodificados de toda a carga útil.
// Isso é semelhante aos cabeçalhos de solicitação HTTP.
//
// Metadados serão serializados e salvos no PubSub.
Metadata Metadata
// Payload é a carga útil da mensagem.
Payload Payload
// ack é fechado quando um reconhecimento é recebido.
// noAck é fechado quando um reconhecimento negativo é recebido.
ack chan struct{}
noAck chan struct{}
ackMutex sync.Mutex
ackSentType ackType
ctx context.Context
}
// ...
Ack
Enviando Ack
Código fonte completo: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Ack envia um reconhecimento para a mensagem.
//
// Ack não bloqueia.
// Ack é idempotente.
// Retorna falso se o Nack já foi enviado.
func (m *Message) Ack() bool {
// ...
Nack
Código fonte completo: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Nack envia um reconhecimento negativo para a mensagem.
//
// Nack não bloqueia.
// Nack é idempotente.
// Retorna falso se o Ack já foi enviado.
func (m *Message) Nack() bool {
// ...
Recebendo Ack/Nack
Código fonte completo: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go
// ...
selecionar {
caso
Contexto
As mensagens contêm o contexto da biblioteca padrão, assim como uma solicitação HTTP.
Código fonte completo: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Contexto retorna o contexto da mensagem. Para alterar o contexto, use SetContext.
//
// O contexto retornado é sempre não nulo; o padrão é o contexto background.
func (m *Message) Context() context.Context {
if m.ctx != nil {
return m.ctx
}
return context.Background()
}
// SetContext define o contexto fornecido como o contexto da mensagem.
func (m *Message) SetContext(ctx context.Context) {
m.ctx = ctx
}
// ...