如何在将事件保存到事件存储时进行事务处理



我想在将事件保存到事件存储时使用wolkenkit事件存储中的事务,并且如果其他事情失败,可以回滚这些事件,这可能吗?我在源代码中(在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中,过程是命令处理程序发布事件,只有当命令处理程序成功时,事件才会以要么全有要么全无的方式存储在事件存储中。

为了能够更好地理解您的用例——您说过,您希望:

在其他事情失败时回滚这些事件

这是什么;其他的东西";是

由于这可能是一个更长时间讨论的开始,我认为StackOverflow可能不是一个完美的地方,所以如果你想和我们谈谈这个功能,你能为此打开一个功能请求吗?

最新更新