MongoDB 的 Event Store 订阅服务
Event Store subscription service to MongoDB
我想知道是否可以通过 Get Event Store
创建对 Mongo
的订阅服务?也许我措辞不正确,但让我解释一下。我目前有一个使用 NEventStore
将事件写入 Mongo Database
的过程。我想做的是有一个订阅服务,订阅 Stream
in Mongo
.
无法在互联网上找到任何关于此的内容,但是这可能吗?简而言之,我的问题可能是您能否将两者混合搭配在一起,或者为了做到这一点,我必须将我的事件写入 eventstore
而不是 Mongo
?也许,我做错了,还有其他选择吗?
我可以看到正在写入我的事件,但它无法触发 EventAppeared
。目前所有这些都在我的机器上本地完成。
我已经尝试创建一个精简的应用程序来执行此操作:
使用以下方法创建订阅
using (var connection = EventStoreConnection.Create(new IPEndPoint(IPAddress.Loopback, 1113)))
{
connection.SubscribeToStreamAsync(@"mongodb://localhost:27017/Test", false, EventAppeared, SubscriptionDropped);
var repository = new NEventStoreRepository();
repository.Write(new SomethingHasHappened("Hello"));
Console.ReadLine();
}
private static void SubscriptionDropped(EventStoreSubscription arg1, SubscriptionDropReason arg2, Exception arg3)
{
}
private static void EventAppeared(EventStoreSubscription arg1, ResolvedEvent arg2)
{
}
我通过 NEventStore
将事件写入我的 mongo 数据库
public void Write(object @event)
{
var id = Guid.NewGuid();
using (var scope = new TransactionScope())
{
using (var store = WireupEventStore())
{
using (var stream = store.OpenStream(id.ToString(), 0, int.MaxValue))
{
stream.Add(new EventMessage { Body = @event });
stream.CommitChanges(Guid.NewGuid());
scope.Complete();
}
}
}
Console.ReadKey();
}
private static IStoreEvents WireupEventStore()
{
return Wireup
.Init()
.LogToOutputWindow()
.UsingMongoPersistence("NEventStore.MongoDB", new DocumentObjectSerializer())
.InitializeStorageEngine()
.UsingJsonSerialization()
.Build();
}
正常的事件流程如下:
(假定一切都已安装并且 运行...)
- 在您的 GetEventStore 中注册流的订阅者
申请代码
- 将事件保存到流中
- 事件出现在您的订阅者中
我认为您要么混淆了事情的流程,要么试图做一些完全不受支持的事情(比如让 MongoDb 订阅 GetEventStore)。我认为你的代码正在做的是:
- 正在设置 NEventStore 以保存到 MongoDb
- 正在订阅名为 "mongodb://localhost:27017/Test"
的 GetEventStore 中的流
- 正在将事件保存到 MongoDb
据我所知,您从未将任何事件保存到 GetEventStore,因此 EventAppeared 方法中什么也没有出现。您正在保存到 MongoDb.
[更新]
I want to subscribe to a Mongodb stream and populate GetEventStore which I believe isn't possible from what I gather from your answer.
MongoDb 没有流,它有集合——它是一个文档数据库。流是 GetEventStore 中的一个概念。但是,看起来 NEventStore 允许您连接消息调度程序,这大概意味着您可以注册处理程序来侦听事件。在这些处理程序中,您可以保存到 GetEventStore。
我想知道是否可以通过 Get Event Store
创建对 Mongo
的订阅服务?也许我措辞不正确,但让我解释一下。我目前有一个使用 NEventStore
将事件写入 Mongo Database
的过程。我想做的是有一个订阅服务,订阅 Stream
in Mongo
.
无法在互联网上找到任何关于此的内容,但是这可能吗?简而言之,我的问题可能是您能否将两者混合搭配在一起,或者为了做到这一点,我必须将我的事件写入 eventstore
而不是 Mongo
?也许,我做错了,还有其他选择吗?
我可以看到正在写入我的事件,但它无法触发 EventAppeared
。目前所有这些都在我的机器上本地完成。
我已经尝试创建一个精简的应用程序来执行此操作:
使用以下方法创建订阅
using (var connection = EventStoreConnection.Create(new IPEndPoint(IPAddress.Loopback, 1113))) { connection.SubscribeToStreamAsync(@"mongodb://localhost:27017/Test", false, EventAppeared, SubscriptionDropped); var repository = new NEventStoreRepository(); repository.Write(new SomethingHasHappened("Hello")); Console.ReadLine(); } private static void SubscriptionDropped(EventStoreSubscription arg1, SubscriptionDropReason arg2, Exception arg3) { } private static void EventAppeared(EventStoreSubscription arg1, ResolvedEvent arg2) { }
我通过 NEventStore
将事件写入我的 mongo 数据库public void Write(object @event) { var id = Guid.NewGuid(); using (var scope = new TransactionScope()) { using (var store = WireupEventStore()) { using (var stream = store.OpenStream(id.ToString(), 0, int.MaxValue)) { stream.Add(new EventMessage { Body = @event }); stream.CommitChanges(Guid.NewGuid()); scope.Complete(); } } } Console.ReadKey(); } private static IStoreEvents WireupEventStore() { return Wireup .Init() .LogToOutputWindow() .UsingMongoPersistence("NEventStore.MongoDB", new DocumentObjectSerializer()) .InitializeStorageEngine() .UsingJsonSerialization() .Build(); }
正常的事件流程如下:
(假定一切都已安装并且 运行...)
- 在您的 GetEventStore 中注册流的订阅者 申请代码
- 将事件保存到流中
- 事件出现在您的订阅者中
我认为您要么混淆了事情的流程,要么试图做一些完全不受支持的事情(比如让 MongoDb 订阅 GetEventStore)。我认为你的代码正在做的是:
- 正在设置 NEventStore 以保存到 MongoDb
- 正在订阅名为 "mongodb://localhost:27017/Test" 的 GetEventStore 中的流
- 正在将事件保存到 MongoDb
据我所知,您从未将任何事件保存到 GetEventStore,因此 EventAppeared 方法中什么也没有出现。您正在保存到 MongoDb.
[更新]
I want to subscribe to a Mongodb stream and populate GetEventStore which I believe isn't possible from what I gather from your answer.
MongoDb 没有流,它有集合——它是一个文档数据库。流是 GetEventStore 中的一个概念。但是,看起来 NEventStore 允许您连接消息调度程序,这大概意味着您可以注册处理程序来侦听事件。在这些处理程序中,您可以保存到 GetEventStore。