2016-08-05 10 views
1

Мне было интересно, удалось ли создать услугу подписки до Mongo через Get Event Store? Возможно, я сформулировал это неправильно, но позвольте мне объяснить. В настоящее время у меня есть процесс, который записывает события в Mongo Database с использованием NEventStore. То, что я хотел бы сделать, - это услуга подписки, которая подписывается на Stream в Mongo.Служба подписки на Event Store на MongoDB

Не удалось найти что-либо в interweb об этом, в частности, однако, возможно ли это? Мой вопрос в двух словах, возможно, это вы можете смешивать и сопоставлять эти два вместе или для этого я должен написать свои события eventstore, а не Mongo? Возможно, я собираюсь сделать это неправильно, и есть альтернатива?

Я могу видеть, что мое событие написано, однако он не может вызвать EventAppeared. Все это делается локально на моей машине.

Я попытался создать усеченную приложение, которое делает это:

  1. Создайте подписку с помощью следующей

    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) 
    { 
    } 
    
  2. я пишу событие в моей базе данных Монго через NEventStore

    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

У вас есть соединение mongodb как имя потока событий в GetEventStore. Это намеренно? Действительно ли ваш поток называется «mongodb: // localhost: 27017/Test»? – tomliversidge

ответ

1

Нормальный поток событий для этого будет выглядеть следующим образом:

(установлен и работает с учетом все ...)

  1. Регистрация абонента в поток в GetEventStore в коде приложения
  2. Сохранить события в поток
  3. события появляются в вашем подписчика

Я думаю, что вы либо путает поток вещей о r пытается сделать что-то совершенно неподдерживаемое (например, иметь подписчика MongoDb в GetEventStore). То, что я думаю, что ваш код делает это:

  1. Настройка NEventStore для сохранения MongoDb
  2. подписавшись на поток в GetEventStore называется "MongoDB: // локальный: 27017/Test"
  3. Сохранение event to MongoDb

Насколько я могу судить, вы никогда не сохраняете никаких событий в GetEventStore, поэтому почему-то никогда не появляется в методе EventAppeared. Вы сохраняете MongoDb.

[UPDATE]

Я хочу подписаться на поток MongoDB и заполнить GetEventStore, который я считаю, это не возможно, от того, что я понял из вашего ответа.

У 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

Приветствия за помощь ценят это. Он чувствовал, что я делаю неправильно, но хотел подтвердить это. У меня есть другой подход, который, как я знаю, будет работать (в основном то, что вы упомянули в ответе) –