メッセージ
メッセージは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
}
// ...