Event Store - Max count
要設定 Event Store 的 Stream 只存放指定個數的 Event,可以設定 Stream 的 Max count。
透過 StreamMetadata 的 MaxCount 指定 Stream 最大存放的 Event 數,然後透過 Connection.SetStreamMetadataAsync,帶入 Stream 的名稱、ExpectedVersion、以及剛設定好的 StreamMetadata。
...
var streamMetaData = StreamMetadata.Create(maxCount: maxCount);
conn.SetStreamMetadataAsync(streamName, ExpectedVersion.StreamExists, streamMetaData).Wait();
像是筆者這邊設定了 Stream 的 Metadata,指定 Stream 只存放指定個數的 Event,然後接著嘗試塞入超過指定個數的 Event。
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。