2016-08-05 3 views
1

Je me demandais s'il était possible de créer un service d'abonnement à Mongo via Get Event Store? Peut-être que je l'ai mal formulé mais laissez-moi vous expliquer. J'ai actuellement un processus qui écrit des événements à Mongo Database en utilisant NEventStore. Ce que je voudrais faire est d'avoir un service d'abonnement qui souscrit à un Stream dans Mongo.Event Store service d'abonnement à MongoDB

Vous n'avez pas été en mesure de trouver quoi que ce soit sur l'interweb en particulier, mais est-ce possible? Ma question en un mot, peut-être est-ce que vous pouvez mélanger et assortir les deux ensemble ou pour ce faire, je dois écrire mes événements à eventstore par opposition à Mongo? Peut-être, je vais à propos de ce tort et il y a une alternative?

Je peux voir mon événement en cours d'écriture mais il ne parvient pas à déclencher EventAppeared. Tout cela est fait localement sur ma machine pour le moment.

J'ai essayé de créer un dépouillé application qui fait cela:

  1. Créer un abonnement en utilisant les éléments suivants

    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. J'écris un événement à ma base de données de mongo via 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

Parlez-vous de GetEventStore? – tomliversidge

+0

Excuses, oui je suis. –

+0

Vous avez votre connexion mongodb comme nom de votre flux d'événements dans GetEventStore. Est-ce intentionnel? Votre flux s'appelle-t-il réellement "mongodb: // localhost: 27017/Test"? – tomliversidge

Répondre

1

Le flux normal des événements pour ce serait comme suit:

(tout donné est installé et en cours d'exécution ...)

  1. inscrire un abonné à un flux en GetEventStore dans votre code d'application
  2. Enregistrer les événements dans le flux
  3. les événements apparaissent dans votre abonné

Je pense que vous confondez soit le flux des choses o r essayer de faire quelque chose de totalement non supporté (comme avoir Abonné MongoDb à GetEventStore). Ce que je pense votre code est en train de faire est:

  1. Mise en place NEventStore pour sauver à MongoDB
  2. vous abonnant à un flux en GetEventStore appelé "MongoDB: // localhost: 27017/Test"
  3. Enregistrement d'un Événement à MongoDb

Pour autant que je puisse voir, vous ne sauvegardez jamais d'événements dans GetEventStore, par conséquent, rien n'apparaît dans la méthode EventAppeared. Vous économisez sur MongoDb.

[UPDATE]

Je veux vous abonner à un flux MongoDB et remplir GetEventStore que je crois n'est pas possible de ce que je déduis de votre réponse.

MongoDb n'a pas de flux, il a des collections - c'est une base de données de documents. Les flux sont un concept dans GetEventStore. Cependant, il semble que NEventStore vous permet de connecter un répartiteur de messages, ce qui signifie probablement que vous pouvez enregistrer des gestionnaires pour écouter des événements. Dans ces gestionnaires, vous pouvez ensuite enregistrer dans GetEventStore.

+0

Je crois que vous avez répondu à ma question. Cependant, je veux m'abonner à un flux de Mongodb et remplir GetEventStore qui je crois n'est pas possible d'après ce que je comprends de votre réponse. –

+0

vous devrez vous connecter au mécanisme que NEventStore utilise pour vous permettre de vous abonner aux événements, puis à l'intérieur de votre gestionnaire, enregistrez-le dans l'EventStore: https://github.com/NEventStore/NEventStore-Example/blob/master/NEventStore.Example/MainProgram.cs#L55. – tomliversidge

+0

Salutations pour l'aide l'apprécier. J'ai senti que ce que je faisais était faux, mais je voulais le confirmer. J'ai une autre approche qui, je le sais, fonctionnera (essentiellement ce que vous avez mentionné dans la réponse) –