rita:利用 NATS 實現以事件為中心和反應模式的工具包

banq發表於2022-07-05

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)


 

相關文章