将事件保存到事件存储时如何进行交易

How to make transaction when saving events to events store

我想在将事件保存到 eventstore 时使用 wolkenkit-eventstore 中的事务,并且能够在其他事情失败时回滚这些事件,这可能吗? 我在源代码中(在 saveEvents 方法中)看到你正在释放连接池:

try {
      const result = await connection.query({ name: `save events ${committedEvents.length}`, text, values });

      for (let i = 0; i < result.rows.length; i++) {
        committedEvents[i].event.metadata.position = Number(result.rows[i].position);
      }
    } catch (ex) {
      if (ex.code === '23505' && ex.detail.startsWith('Key ("aggregateId", revision)')) {
        throw new Error('Aggregate id and revision already exist.');
      }

      throw ex;
    } finally {
      connection.release();
    }

在最后一步,所以我无法以任何方式获得此连接池。 有什么方法可以用 wolkenkit-eventstore 做基于交易的系统吗?

我是wolkenkit的核心开发者之一,所以首先感谢您提出这个问题

现在你想要的实际上是不可能的,但是支持这个用例可能是个好主意。

wolkenkit的流程是command handler发布事件,只有command handler成功后,事件才会以all-or-nothing的方式存储在事件存储中。

为了能够更好地理解您的用例——您说,您想要:

to rollback those events if something else fail[s]

这个“别的东西”会是什么?

由于这可能是进行更长时间讨论的开始,我认为 Whosebug 可能不是进行此操作的完美场所,所以如果您想与我们讨论此功能,能否打开一个 feature request为了这个?