Message
Ack()Nack()
AckNackAckNack
完整源码:
- github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID 是消息的唯一标识符。
//
// 它仅由 Watermill 用于调试。
// UUID 可以为空。
UUID string
// Metadata 包含消息元数据。
//
// 可以用于存储不需要对整个有效负载 unmarshaling 的数据。
// 它类似于 HTTP 请求的头。
//
// Metadata 将被 marshal,并将保存到 PubSub。
Metadata Metadata
// Payload 是消息的有效负载。
Payload Payload
// 当收到确认时,ack 关闭。
ack chan struct{}
// noACk is closed, when negative acknowledge is received.
// 当收到否定应答时,noACk 关闭。
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 <-msg.Acked():
log.Print("ack received")
case <-msg.Nacked():
log.Print("nack received")
}
// ...
复制代码
Context
Message 包含标准库上下文,就像 HTTP 请求一样。
完整源码:
- github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Context 返回消息的上下文。要更改上下文,使用 SetContext。
//
// 返回的上下文总是非空的;它默认为 background context.。
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
}
// ...
复制代码