Posts
Event Store - Subscribing to Receive Stream Updates with .NET API
要使用 Event Store .NET API 訂閱並監聽 Stream 的變化,可以使用 PersistentSubscriptionSettings.Create 設定訂閱,然後調用 Connection.CreatePersistentSubscriptionAsync 方法建立 Persistent Subscriptions。
... var settings = PersistentSubscriptionSettings.Create() .DoNotResolveLinkTos() .StartFromCurrent(); ... conn.CreatePersistentSubscriptionAsync(streamName, groupName, settings, credentials).Wait(); ... 建立後可在 Web interface 看到對應的 Persistent Subscriptions。
接著透過 Connection.ConnectToPersistentSubscription 訂閱 Persistent Subscriptions,指定 Stream 的名稱、Group 的名稱、收到訂閱要做的處理…等即可。
conn.ConnectToPersistentSubscription(streamName, groupName, (_, x) => { ... }, (sub, reason, ex) => { }, credentials); ... 像是下面這邊筆者建立了一個名為 MyGroup 的訂閱,訂閱的來源來自 MyStream,建立訂閱後連結訂閱,然後將收到的訂閱訊息顯示出來。
using EventStore.ClientAPI; using EventStore.ClientAPI.SystemData; ... using (var conn = EventStoreConnection.
read morePosts
Event Store - Read a Single Event with .NET API
要使用 Event Store .NET API 讀取 Event Store 特定 Stream 內特定的 Event,可以帶入 Stream 的名稱、Event 的編號,調用 Connection.ReadEventAsync 方法。
... var readResult = conn.ReadEventAsync(streamName, 0, true).Result; ... 然後再去讀取需要的 Event 資料即可。
... Console.WriteLine("{0} {1}", readResult.EventNumber, Encoding.UTF8.GetString(readResult.Event.Value.Event.Data)); ... 像是筆者這邊有個 Event 如下:
就可以像下面這樣讀取指定的 Event。
using EventStore.ClientAPI; ... using (var conn = EventStoreConnection.Create(connectionString, connectionName)) { conn.ConnectAsync().Wait(); var streamName = "MyStream"; var readResult = conn.ReadEventAsync(streamName, 0, true).Result; Console.WriteLine("{0} {1}", readResult.EventNumber, Encoding.UTF8.GetString(readResult.Event.Value.Event.Data)); } ... Link Step 2 - Read events from a stream and subscribe to changes | Event Store
read morePosts
Event Store - Read a Stream of Events with .NET API
要使用 Event Store .NET API 讀取 Event Store 特定 Stream 內的 Event,可以帶入 Stream 的名稱、起始的 Event 編號、以及預計要讀取的 Event 數,去調用 Connetction.ReadStreamEventsForwardAsync 方法。
... var readEvents = conn.ReadStreamEventsForwardAsync(streamName, start, count, true).Result; ... 然後再去讀取需要的 Event 資料即可。
... foreach (var evt in readEvents.Events) Console.WriteLine("{0} {1}", evt.Event.EventNumber, Encoding.UTF8.GetString(evt.Event.Data)); ... 像是這邊筆者有個 Stream 內含有 100 個相同資料的 Event。
就可以像下面這樣讀取特定範圍的 Event。
using EventStore.ClientAPI; ... using (var conn = EventStoreConnection.Create(connectionString, connectionName)) { conn.ConnectAsync().Wait(); var streamName = "MyStream"; var readEvents = conn.ReadStreamEventsForwardAsync(streamName, 10, 10, true).
read morePosts
Event Store - Appending to a stream in a single write with .NET API
要使用 Event Store .NET API 發送 Event 給 Event Store,可以先進行 Event Store 的連線。
連線後設定 EventData。
... var typeName = "MyType"; var data = new { Msg="Hello world!" }; var jsonData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data)); var eventData = new EventData(Guid.NewGuid(), typeName, true, jsonData, null); ... 呼叫 Connection.AppendToStreamAsync 將 EventData 送入 Event Store 指定的 Stream (ExpectedVersion 可用來決定是否要判斷 Stream 是否存在)。
... conn.AppendToStreamAsync(streamName, ExpectedVersion.Any, eventData); ... 程式寫起來會像下面這樣:
using EventStore.ClientAPI; using Newtonsoft.Json; using System; using System.Text; ... var connectionName = "MyConsole"; var connectionString = "ConnectTo=tcp://admin:changeit@localhost:1113; HeartBeatTimeout=500"; using (var conn = EventStoreConnection.
read morePosts
Event Store - Connect with .NET API
要使用 Event Store .NET API 連接 Event Store,先要安裝 EventStore.Client 套件。
加入 EventStore.ClientAPI 命名空間。
using EventStore.ClientAPI; 接著調用 EventStoreConnection.Create 取得 Connection 物件。
... using (var conn = EventStoreConnection.Create(...)) { ... } 調用 Connection 物件的 ConnectAsync 方法建立與 EventStore 的連線。
... conn.ConnectAsync(); ... 像是下面這樣,指定 Connection name 與 uri 建立出對應的連線物件,然後進行連線。
var connectionName = "MyConsole"; var uri = new Uri("tcp://admin:changeit@localhost:1113"); using (var conn = EventStoreConnection.Create(uri, connectionName)) { conn.ConnectAsync().Wait(); Console.ReadKey(); } 連線的建立可從 Web interface 的 Dashboard 頁面查閱,像是這邊 Connections 下就有剛所建立的 MyConsole connection。
read morePosts
Event Store - Subscribing to Receive Stream Updates with web interface
要透過 Web interface 去訂閱事件,可切換至 Persistent Subscriptions 頁面,點選 New Subscription 按鈕。
填寫 Group、 Stream…等資訊建立 Subscription。
切回到 Stream Browser 頁面發送 Event, Stream ID 需符合 Subscription 的 Stream 。
再回到 Persistent Subscriptions 頁面,可從 Subscription 的狀態因收到了 Event 而有所變動。
Link Step 2 - Read events from a stream and subscribe to changes | Event Store
read morePosts
Event Store - Streams projection
$streams 是 Event Store 預設提供的 Projection,可以將 Event Link 到一個集中的 Stream。
使用前需先將 $streams projection 開啟。
開啟後切到 Stream Browser 頁面,點選 Add Event 按鈕發送 Event。
這邊可一次發送了多個 Event 做個測試。
發送完切回 Stream Browser 頁面,會看到 $streams projection 會幫我們產生 $streams 這樣的 Stream。
點進去會看到剛所發送的 Event 都被 Link 在這個 Stream 內。
Link System Projections | Event Store
read morePosts
Event Store - By event type projection
$by_event_type 是 Event Store 預設提供的 Projection,可以將 Event 依 Event Type 拆分成到對應的 Stream。
使用前需先將 $by_event_type projection 開啟。
開啟後切到 Stream Browser 頁面,點選 Add Event 按鈕發送 Event。
這邊可一次發送了多個 Event 做個測試。
發送完切回 Stream Browser 頁面,會看到 $by_event_type projection 會幫我們產生 $et-[EventType] 這樣的 Stream。
Link
read morePosts
Event Store - By category projection
$by_category 是 Event Store 預設提供的 Projection,可以將 Event 依 Stream ID 去拆分成不同 Category 的 Stream。
使用前需先將 $by_category projection 開啟。
開啟後切到 Stream Browser 頁面,點選 Add Event 按鈕發送 Event。
Event 的 Stream ID 可依 [Category]-[ID] 這樣的格式下去定義。
這邊可一次發送了多個 Event 做個測試。
發送完切回 Stream Browser 頁面,會看到 $by_category projection 會幫我們產生 $ce-[Category] 這樣的 Stream。
裡面都是相同 Category 的 Event 。
$by_category projection 若有需要也可以做些調動,只要點選 Edit 按鈕。
對 Source 部份做些調動,Source 中的 first 是指第一個分隔符號,- 是指用來分隔的符號,這邊可以試著把 first 改為 last。
按下 Save 按鈕儲存。
$by_category project 就會依最後一個分隔符號下去切割 Category。
read morePosts
Event Store - Read a Stream of Events with HTTP API
要透過 HTTP API 去讀取 Stream 下的所有 Event,可以像下面這樣向 Event Store 查詢。
http://<URL>/streams/<STREAM_ID> Accept 可以指定回傳的格式是 JSON。
application/vnd.eventstore.atom+json 或是 XML。
application/atom+xml 像是如果要讀取 newstream Stream 下的所有 Event,就可以像下面這樣透過 CURL 發送請求給 Event Store。
curl -i -H "Accept:application/vnd.eventstore.atom+json" "http://127.0.0.1:2113/streams/newstream" Link Step 2 - Read events from a stream and subscribe to changes | Event Store
read more