Wiadomość

Wiadomość jest jednym z głównych elementów Watermill. Wiadomości są publikowane przez "wydawców" i odbierane przez "subskrybentów". Podczas przetwarzania wiadomości, jeśli przetwarzanie zawiedzie, należy wysłać Ack() (sygnalizujące pomyślne przetwarzanie) lub Nack() (sygnalizujące niepowodzenie przetwarzania).

Ack i Nack wiadomości są obsługiwane przez subskrybentów (w domyślnej implementacji, subskrybenci będą czekać na Ack lub Nack).

Pełny kod źródłowy: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID to unikalny identyfikator wiadomości.
	//
	// Wykorzystywany do debugowania w Watermill.
	// UUID może być puste.
	UUID string

	// Metadata zawiera metadane wiadomości.
	//
	// Może być używane do przechowywania danych, które nie muszą być dekodowane z całej ładunku.
	// Jest podobne do nagłówków żądania HTTP.
	//
	// Metadane zostaną zserializowane i zapisane do PubSub.
	Metadata Metadata

	// Payload to ładunek wiadomości.
	Payload Payload

	// ack jest zamykany, gdy otrzymano potwierdzenie.
	// noAck jest zamykany, gdy otrzymano negatywne potwierdzenie.
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Potwierdzenie (Ack)

Wysyłanie Ack

Pełny kod źródłowy: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ack wysyła potwierdzenie dla wiadomości.
//
// Ack nie blokuje.
// Ack jest idempotentne.
// Zwraca false, jeśli już wysłano Nack.
func (m *Message) Ack() bool {
// ...

Negatywne potwierdzenie (Nack)

Pełny kod źródłowy: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack wysyła negatywne potwierdzenie dla wiadomości.
//
// Nack nie blokuje.
// Nack jest idempotentne.
// Zwraca false, jeśli już wysłano Ack.
func (m *Message) Nack() bool {
// ...

Odbieranie Ack/Nack

Pełny kod źródłowy: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
wybór {
przypadek 

Kontekst

Wiadomości zawierają kontekst standardowej biblioteki, tak jak żądanie HTTP.

Pełny kod źródłowy: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Context zwraca kontekst wiadomości. Aby zmienić kontekst, użyj SetContext.
//
// Zwracany kontekst zawsze jest niepusty; domyślnie jest to kontekst tła.
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext ustawia podany kontekst jako kontekst wiadomości.
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...