如何解决使用RavenDB持久性插件连接JOliver的EventStore
|| 我正在评估JOliver \的EventStore库。特别是,我试图将RavenDB用作EventStore的持久性引擎。 EventStore为此提供了一个插件。注意:数据库为空,没有索引(默认索引除外)。 在为商店接线时,我使用了以下方法:var store = Wireup.Init()
.UsingRavenPersistence(\"EventStore\",new DocumentObjectSerializer())
.Build();
但是,当我运行程序时,出现异常,指示找不到“ RavenCommitByRevisionRange”索引。
在研究EventStore代码时,我认为问题恰好在于RavenPersistenceEngine尚未初始化。初始化代码将所需的索引安装在RavenDB服务器中。
在SQL Server方面,我注意到示例项目中的接线代码显示了对名为“ \ InitializeStorageEngine \”的扩展方法的调用。此扩展方法与类“ PersistenceWireup \”相关联。但是,我用于连接RavenDB持久性的扩展方法返回类“ Wireup”。因此,我将部分接线代码包装在一个新的PersistenceWireup实例中,并能够像这样调用\“。InitializeStorageEngine()\”:
var store = new PersistenceWireup(
Wireup.Init()
.UsingRavenPersistence(\"EventStore\",new DocumentObjectSerializer()))
.InitializeStorageEngine()
.Build();
这很棒!现在,RavenDB数据库包含必要的索引。
所以...我的问题:\“。UsingRavenPersistence(...)\”是否应该返回\“ PersistenceWireup \”的实例,而不是简单地返回\“ Wireup \”的实例?还是有更好的方法在EventStore中连接RavenDB持久性?
解决方法
嗯好吧,我认为raven未实现PersistenceWireup的原因是b / c,该接口公开了ISerializer特定于文档存储实现不使用的方法。我们可能需要将初始化移动到Wireup。我会研究这个。
但是,我发现您缺少在存储后将调度事件的调度程序。这是故意的吗?如果您不打算从另一个角度发布,请添加“同步/异步”调度程序。调度程序当前正在调用Initialize。
Wireup.Init()
.UsingRavenPersistence(\"EventStore\",new DocumentObjectSerializer())
.UsingSynchronousDispatcher()
.PublishTo(new DelegateMessagePublisher(c => PublishMessages(c))
.Build();
,private IStoreEvents GetInitializedEventStore(IDispatchCommits bus)
{
return Wireup.Init()
.UsingRavenPersistence(BootStrapper.RavenDbEventStoreConnectionStringName)
.UsingAsynchronousDispatchScheduler(bus)
.Build();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。