Mensaje

El mensaje es una de las partes fundamentales de Watermill. Los mensajes son publicados por "editores" y recibidos por "suscriptores". Al procesar los mensajes, si el procesamiento falla, se debe enviar un Ack() (indicando un procesamiento exitoso) o un Nack() (indicando un fallo en el procesamiento).

El Ack y Nack del mensaje son manejados por suscriptores (en la implementación por defecto, los suscriptores esperarán un Ack o un Nack).

Código fuente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID es el identificador único del mensaje.
	//
	// Se utiliza para depurar en Watermill.
	// UUID puede estar vacío.
	UUID string

	// Metadata contiene los metadatos del mensaje.
	//
	// Puede usarse para almacenar datos que no necesitan ser decodificados de todo el payload.
	// Es similar a los encabezados de solicitud HTTP.
	//
	// Los metadatos se codificarán y se guardarán en PubSub.
	Metadata Metadata

	// Payload es el contenido del mensaje.
	Payload Payload

	// ack se cierra cuando se recibe una confirmación.
	// noAck se cierra cuando se recibe una negación.
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Ack

Enviando Ack

Código fuente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ack envía una confirmación para el mensaje.
//
// Ack no bloquea.
// Ack es idempotente.
// Devuelve false si Nack ya ha sido enviado.
func (m *Message) Ack() bool {
// ...

Nack

Código fuente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack envía una negación para el mensaje.
//
// Nack no bloquea.
// Nack es idempotente.
// Devuelve false si Ack ya ha sido enviado.
func (m *Message) Nack() bool {
// ...

Recibiendo Ack/Nack

Código fuente completo: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

Contexto

Los mensajes contienen el contexto de la biblioteca estándar, al igual que una solicitud HTTP.

Código fuente completo: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Context devuelve el contexto del mensaje. Para cambiar el contexto, utilice SetContext.
//
// El contexto devuelto siempre es distinto de nulo; el predeterminado es el contexto de fondo.
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext establece el contexto proporcionado como el contexto del mensaje.
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...