将事件保存到事件存储时如何进行交易
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为了这个?
我想在将事件保存到 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为了这个?