首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Watermill(Golang 事件驱动库)核心部件 Message 解析

Watermill(Golang 事件驱动库)核心部件 Message 解析

作者头像
为少
发布2021-05-27 19:15:40
1.1K0
发布2021-05-27 19:15:40
举报

Message

Message(消息)是 Watermill 的核心部分之一。消息由发布者发出,由订阅者接收。当消息被处理时,您应该在处理失败时发送 Ack()Nack()

AckNack 由订阅者处理(在默认实现中,订阅者等待 AckNack)。

完整源码:

  • 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
}
// ...
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Message
  • Ack
  • Nack
  • 接收 Ack/Nack
  • Context
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档