Обновление нескольких агрегатов с помощью JOliver EventStore

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

Однако я не понимаю, как я могу сделать это с помощью магазина событий. Сохранение событий выполняется путем вызова CommitChanges () в потоке событий. Если у нас есть несколько агрегатов для обновления, будет несколько потоков событий и, следовательно, несколько вызовов CommitChanges () . Единственный способ сделать это транзакционным - заключить его в TransactionScope , но это не имеет особого смысла, поскольку базовая технология хранения может не поддерживать транзакции. Итак, я получаю этот код, который определенно не то, что я ищу:

        Guid aggregateGuid1 = Guid.NewGuid();
        Guid aggregateGuid2 = Guid.NewGuid();
        Guid commitGuid = Guid.NewGuid();

        var stream = store.OpenStream(aggregateGuid1, 0, int.MaxValue);
        stream.Add(new EventMessage() { Body = new MonitorDisabled { MonitorGuid = aggregateGuid1, User = "A" } });
        stream.CommitChanges(commitGuid);

        stream = store.OpenStream(aggregateGuid2, 0, int.MaxValue);
        stream.Add(new EventMessage() { Body = new MonitorEnabled { MonitorGuid = aggregateGuid2, User = "B" } });
        // Can't commit twice with the same commit id, what if fails after first one? No way for the store to know it had to write the second part of the commit.
        stream.CommitChanges(commitGuid);

Это заставляет меня чувствовать, что я полностью упускаю что-то о том, как следует использовать хранилище событий.Может ли кто-нибудь помочь мне здесь? Большое спасибо!

5
задан Jochen 16 November 2011 в 11:47
поделиться