rita:利用 NATS 实现以事件为中心和反应模式的工具包


Rita 是一个构建在NATS之上的各种以事件为中心和反应式抽象的工具包。

主要功能:

  • 类型注册表
    • 从字符串到类型的透明映射
    • 支持标注类型、事件、状态、命令等。
  • 事件存储eventstore
    • JetStream 上的层用于事件存储
    • 来自 nats 消息的编码器到/解码器
    • 具有事件存储语义的简单 api
    • 每个商店映射到一个流
  • 事件源状态
    • 事件源状态表示模型
    • 用户实现类型的接口
    • 映射到一个主题
    • 快照或状态达到某个序列以进行按需更新


尽管事件溯源涉及将状态转换建模和持久化为事件,但我们仍然需要派生状态以便在收到命令时做出决策。

从根本上说,我们有一个状态模型,然后我们需要在给定每个事件的情况下进化状态。我们可以将其建模为 Go 中的接口。

type Evolver interface {
  Evolve(event *Event) error
}

一个实现将如下所示:

type Order struct {
  // fields..
}

func (o *Order) Evolve(event *Event) error {
  // Switch on the event type or data (if using the type registry).
  switch e := event.Data.(type) {
  }
}

给定这个模型,为了方便,我们可以使用Evolveon 方法。EventStore

var order Order
lastSeq, err = es.Evolve("orders.1", &order)

这也适用于使用主题通配符的横切状态(所有订单)。

var orderList OrderList
lastSeq, err = es.Evolve("orders.*", &orderlist)