5

JOliverのEventStoreライブラリを評価しています。特に、EventStoreの永続化エンジンとしてRavenDBを使用しようとしています。EventStoreにはこのためのプラグインが付属しています。注:データベースは空で、インデックスはありません(デフォルト以外)。

店舗の配線には、以下を使用しました。

var store = Wireup.Init()
    .UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
    .Build();

ただし、プログラムを実行すると、「RavenCommitByRevisionRange」インデックスが見つからなかったことを示す例外が発生します。

EventStoreコードを掘り下げると、RavenPersistenceEngineが初期化されていないことが問題だと思います。初期化コードは、必要なインデックスをRavenDBサーバーにインストールします。

SQLサーバー側では、サンプルプロジェクトの配線コードに、「InitializeStorageEngine」という拡張メソッドの呼び出しが示されていることに気付きました。この拡張メソッドは、クラス「PersistenceWireup」に関連付けられています。ただし、RavenDB永続性をワイヤリングするために使用している拡張メソッドは、クラス「Wireup」を返します。そこで、ワイヤーアップコードの一部を新しいPersistenceWireupインスタンスにラップし、次のように「.InitializeStorageEngine()」を呼び出すことができました。

var store = new PersistenceWireup(
    Wireup.Init()
        .UsingRavenPersistence("EventStore", new DocumentObjectSerializer()))
            .InitializeStorageEngine()
        .Build();

これはうまくいきます!これで、RavenDBデータベースに必要なインデックスが含まれるようになりました。

だから...私の質問:「。UsingRavenPersistence(...)」は単に「Wireup」ではなく「PersistenceWireup」のインスタンスを返すべきではありませんか?または、EventStoreでRavenDBの永続性を接続するためのより良い方法はありますか?

4

2 に答える 2

5

うーん。まあ、raven が PersistenceWireup を実装しない理由は、ドキュメント ストアの実装が使用しない ISerializer 固有のメソッドをインターフェイスが公開する b/c だと思います。おそらく、初期化を Wireup に移動する必要があります。これを調べます。

ただし、保存後にイベントをディスパッチするディスパッチャーが欠落しているようです。これは意図的なものでしたか?別のエンドポイントから公開する予定がない場合は、同期/非同期ディスパッチャーを追加します。ディスパッチャーは現在、initialize を呼び出しています。

Wireup.Init()
.UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
.UsingSynchronousDispatcher()
.PublishTo(new DelegateMessagePublisher(c => PublishMessages(c))
.Build();
于 2011-05-26T05:44:55.500 に答える
2
private IStoreEvents GetInitializedEventStore(IDispatchCommits bus)
    {
        return Wireup.Init()
            .UsingRavenPersistence(BootStrapper.RavenDbEventStoreConnectionStringName)
            .UsingAsynchronousDispatchScheduler(bus)
            .Build();
    }
于 2012-01-09T11:20:33.700 に答える