2016-08-05 6 views
1

MongoへのサブスクリプションサービスをGet Event Store経由で作成することが可能かどうかは疑問でしたか?おそらく私はこれを間違って表現していますが、私に説明させてください。私は現在にイベントを書き込むプロセスを持っています。NEventStoreを使用しています。私がしたいのは、StreamにサブスクライブするサブスクリプションサービスをMongoに持っていることです。MongoDBへのイベントストアサブスクリプションサービス

特にこのことについては、インターウェブ上で何も見つかりませんでしたが、これは可能ですか?私の質問はおそらくあなたは2つを一緒に混ぜ合わせることができますかこれを行うにはMongoではなくeventstoreに私のイベントを書き込む必要がありますか?おそらく、私はこの間違いを起こしています。代替案がありますか?

私のイベントが書き込まれているのが見えますが、それはトリガーに失敗します。EventAppearedです。これはすべて私のマシン上で現在ローカルで行われています。

私はこれを行うストリップダウンアプリ作成しようとしている:私はNEventStore

を経由して私のmongoデータベースにイベントを書き込む
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) 
{ 
} 
  • を使用してサブスクリプションを作成します

    1. 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

    GetEventStoreについてお聞きしますか? – tomliversidge

    +0

    謝罪、そうです。 –

    +0

    GetEventStoreのイベントストリームの名前としてmongodb接続があります。これは意図的ですか?あなたのストリームは実際に "mongodb:// localhost:27017/Test"と呼ばれていますか? – tomliversidge

    答えて

    1

    ようになり、このためのイベントの通常の流れは次のとおりです。

    (与えられたすべてのものがインストールされ、実行されている...)

    1. があなたの アプリケーションコードにGetEventStoreでストリームへの加入を登録
    2. ストリーム
    3. にイベントを保存するイベントが

    あなたの加入者に表示され、私はあなたがいずれかのO物事の流れを混乱していると思いますr(GetEventStoreにMongoDb加入者を持っているような)完全にサポートされていない何かをしようとしています。私はあなたのコードがやっているを考えるすることです:

  • 保存
    1. はGetEventStoreでストリームへの加入のMongoDB
    2. に保存するNEventStoreを設定するには、 ":// localhostの27017 /テストのMongoDBは" と呼ばれますイベントをMongoDbに

    私が見る限り、GetEventStoreにイベントを保存することは決してないので、なぜEventAppearedメソッドにも何も表示されません。あなたはMongoDbに保存しています。

    私はMongoDBのストリームにサブスクライブし、私はあなたの答えから集めたものからは不可能であると考えてGetEventStoreを移入したい

    [UPDATE]。

    MongoDbにはストリームがありません。コレクションは、ドキュメントデータベースです。ストリームはGetEventStoreの概念です。ただし、NEventStoreではメッセージディスパッチャを接続することができ、ハンドラを登録してイベントを聴くことができるように思われます。これらのハンドラでは、GetEventStoreに保存できます。

  • +0

    私はあなたの質問に答えてくれたと思います。しかし、私はMongodbストリームを購読して、私があなたの答えから集めたものでは不可能だと信じているGetEventStoreを設定したいと思っています。 –

    +0

    NEventStoreがイベント購読を許可するために使用するメカニズムあなたのハンドラの中で、EventStoreに保存します:https://github.com/NEventStore/NEventStore-Example/blob/master/NEventStore.Example/MainProgram.cs#L55。 – tomliversidge

    +0

    助けてくれたことに感謝します。私がやっていることが間違っていると感じましたが、これを確認したかったのです。私は私が知っている別のアプローチがあります(基本的にあなたが答えたところで) –

    関連する問題