メッセージ

メッセージはWatermillの中核部分の1つです。メッセージは "パブリッシャ" によって公開され、 "サブスクライバ" によって受信されます。メッセージの処理中に処理が失敗した場合、Ack()(成功した処理を示す)またはNack()(処理の失敗を示す)を送信する必要があります。

メッセージの Ack および Nack はサブスクライバによって処理されます(デフォルトの実装では、サブスクライバは Ack または Nack を待機します)。

完全なソースコード:github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUIDはメッセージの一意の識別子です。
	//
	// Watermillによるデバッグに使用されます。
	// UUIDは空にすることができます。
	UUID string

	// Metadataはメッセージのメタデータを含みます。
	//
	// ペイロード全体からデコードする必要のないデータを格納するために使用できます。
	// HTTPリクエストヘッダーに類似しています。
	//
	// Metadataはマーシャリングされ、PubSubに保存されます。
	Metadata Metadata

	// Payloadはメッセージのペイロードです。
	Payload Payload

	// ack は、確認が受信されると閉じられます。
	// noAck は、否定的な確認が受信されると閉じられます。
	ack chan struct{}
	noAck chan struct{}

	ackMutex sync.Mutex
	ackSentType ackType

	ctx context.Context
}

// ...

Ack

Ackの送信

完全なソースコード:github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Ackはメッセージの確認を送信します。
//
// Ackはブロックしません。
// Ackは冪等です。
// Nackが既に送信されている場合、falseを返します。
func (m *Message) Ack() bool {
// ...

Nack

完全なソースコード:github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nackはメッセージの否定的な確認を送信します。
//
// Nackはブロックしません。
// Nackは冪等です。
// Ackが既に送信されている場合、falseを返します。
func (m *Message) Nack() bool {
// ...

Ack/Nackの受信

完全なソースコード:github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

コンテキスト

メッセージには、HTTPリクエストと同様に、標準ライブラリのコンテキストが含まれます。

完全なソースコード:github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Contextはメッセージのコンテキストを返します。コンテキストを変更するには、SetContextを使用してください。
//
// 返されるコンテキストは常にnilではなく、デフォルトはバックグラウンドコンテキストです。
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContextは、指定されたコンテキストをメッセージのコンテキストとして設定します。
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...