当前位置: 首页 > 知识库问答 >
问题:

如何利用兵变处理全部赔偿?

郭阳泽
2023-03-14

在Quarkus和小黑麦叛变案中工作,我不知道如何处理赔偿。

我有一份员工名单,我必须更新数据库中的所有员工。数据访问对象(EmployeeDao)具有以下方法:public Uni

此外,我必须返回一个Uni

public Uni<Boolean> updateEmployees(List<Employee> employees) {
    for(Employee employee: employees) {
        //TODO: Execute or compensate
    }
}

我的问题是,如何逐个迭代执行更新过程并处理补偿?

如果任何员工更新过程失败,我想尝试几次,然后,如果我无法更新员工,我必须在返回任何响应之前撤消所有员工。其思想是保持数据库处于一致状态。

如何利用兵变处理全部赔偿?


共有1个答案

郭皓
2023-03-14

如果我理解正确,那么您需要执行一组异步操作并将它们组合起来。为此,您可以执行以下操作:

List<Uni<?>> list = new ArrayList();
for(Employee employee: employees) {
   Uni<Void> uni = update(employee);
   list.add(uni);
}

return Uni.combine().all().unis(list)
   .with(list -> { /* all employees have been updated */ return true; })
   .onFailure().call(failure -> {
       Uni<?> uni = compensate();
       return uni.onItem().transform(x -> false);
   });

第一个外观为每个更新收集Unis。然后我们把这些结合起来。如果一切都很好,我们就很好,回归真实。如果发生了不好的事情,我们将进行补偿并返回false。

 类似资料:
  • 问题内容: 我正在尝试为局部变量创建注释。我知道我不能在生成的字节码中保留注释,但是我应该能够在编译时通过执行以下操作来访问信息: 仅,当我在以下指定的受支持类型中指定包含“垃圾”的ProcessorFactory时,apt或javac不会对此进行处理: 但是,当我之前移动@Junk批注时,它将起作用 有想法或解决方法? 问题答案: 做了一些快速测试并进行了一些搜索,看起来好像并没有真正被支持。

  • 这是我的代码: 我收到两条编译信息: 我不太清楚,因为返回一个。。。 有什么想法吗?

  • 希望创建一个DynamoDB全局表来存储客户信息。我的问题是,我目前的模式是监听此表上的更改,并使用Lambda触发器发送电子邮件更新。 i、 e.您的个人资料信息已更改。如果不是你。。 我现在是否需要在每个区域中使用该Lambda?数据复制是否意味着每个区域都会触发该Lambda?

  • 问题内容: 先前曾问过一个有关如何覆盖环境指令中定义的变量的问题,看来这是不可能的。 我想在一个阶段中设置一个变量,并使其可用于其他阶段。在声明性管道中,似乎唯一的方法是在script {}块中。 例如,我需要在结帐后设置一些变量。因此,在结帐阶段结束时,我有一个script {}块来设置这些var,并且可以在其他阶段访问它们。 这可行,但感觉不对。并且出于可读性考虑,我更愿意在管道的顶部声明这些

  • 我有这么一个需求,已有一个项目已经搞了一年多了 我现在想把这个项目开源,发布到 github 上,但是我不想把以前的 git 提交记录让别人看到,只想看到从今天之后的 commit 有办法限制吗? 比如我现在的代码在自建的 gitlab,想发布一份到 github,但是 github 上的,我只希望被人看到的 git log 只是从今天开始的,以往的看不到

  • 问题内容: 在PHP中,你只能将其用于和(查询字符串)变量。Python中的等效功能是什么? 问题答案: 假设你正在发布带有以下内容的html表单: 如果使用原始: 如果使用或: 使用: : : 如果使用或,还可以直接使用参数定义处理程序函数: 因此,你实际上必须选择这些框架之一。