我想知道是否可以通过Mongo
向Get Event Store
创建订阅服务?也许我的说法不正确,但让我解释一下。我目前有一个使用Mongo Database
将事件写入NEventStore
的流程。我想要做的是订阅服务,订阅Stream
中的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();
}
答案 0 :(得分:1)
此事件的正常流程如下:
(鉴于所有内容已安装并正在运行......)
我认为你要么混淆事物的流程,要么试图做一些完全不受支持的事情(比如让MongoDb订阅者加入GetEventStore)。我认为您的代码正在做的是:
据我所知,你永远不会将任何事件保存到GetEventStore,因此为什么没有出现在EventAppeared方法中。你要保存到MongoDb。
[UPDATE]
我想订阅一个Mongodb流并填充GetEventStore,我认为这不可能从我从你的回答中收集到的内容。
MongoDb没有流,它有集合 - 它是一个文档数据库。 Streams是GetEventStore中的一个概念。但是,看起来NEventStore允许您连接一个消息调度程序,这可能意味着您可以注册处理程序来监听事件。在这些处理程序中,您可以保存到GetEventStore。