Event Store - Max count

要設定 Event Store 的 Stream 只存放指定個數的 Event,可以設定 Stream 的 Max count。


透過 StreamMetadata 的 MaxCount 指定 Stream 最大存放的 Event 數,然後透過 Connection.SetStreamMetadataAsync,帶入 Stream 的名稱、ExpectedVersion、以及剛設定好的 StreamMetadata。

1
2
3
4
...
var streamMetaData = StreamMetadata.Create(maxCount: maxCount);

conn.SetStreamMetadataAsync(streamName, ExpectedVersion.StreamExists, streamMetaData).Wait();


像是筆者這邊設定了 Stream 的 Metadata,指定 Stream 只存放指定個數的 Event,然後接著嘗試塞入超過指定個數的 Event。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using EventStore.ClientAPI;
...
using (var conn = EventStoreConnection.Create(connectionString, connectionName))
{
conn.ConnectAsync().Wait();

var streamName = "MyStream";
var typeName = "MyType";
var streamMetaData = StreamMetadata.Create(maxCount: 10);

conn.SetStreamMetadataAsync(streamName, ExpectedVersion.StreamExists, streamMetaData).Wait();

var data = new
{
Msg = "Hello world!"
};
var jsonData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
var eventData = new EventData(Guid.NewGuid(), typeName, true, jsonData, null);
var eventDataCollection = Enumerable.Repeat(eventData, 100);
conn.AppendToStreamAsync(streamName, ExpectedVersion.Any, eventDataCollection).Wait();
}


可以看到 Stream 最後只會留下指定個數的 Event。