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