我有3个微服务,正在尝试为每个服务实现补偿活动。现在假设在一个错误补偿事件触发之后,现在这个补偿活动本身抛出了错误。如果补偿活动失败,我想重试5次。以下是我实现的示例代码,但它不起作用。对此有何建议。
public static BpmnModelInstance createSaga() {
// define saga as BPMN process
ProcessBuilder flow = Bpmn.createExecutableProcess("poc");
// - flow of activities and compensating actions
flow.startEvent()
.serviceTask("Project2").name("Save Project2").camundaClass(SaveProject2.class)
.boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone()
.compensationStart().serviceTask("RollbackProject2").camundaClass(RollbackProject2.class).camundaFailedJobRetryTimeCycle("R5/PT5S").compensationDone()
.serviceTask("Project3").name("Save Project3").camundaClass(SaveProject3.class)
.boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone()
.compensationStart().serviceTask("RollbackProject3").camundaFailedJobRetryTimeCycle("R5/PT1M").camundaClass(RollbackProject3.class).compensationDone()
.serviceTask("Project4").name("Save Project4").camundaClass(SaveProject4.class)
.boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone()
.compensationStart().serviceTask("RollbackProject4").camundaClass(RollbackProject4.class).compensationDone()
.endEvent();
// - trigger compensation in case of any exception (other triggers are possible)
flow.eventSubProcess()
.startEvent().error("java.lang.Throwable")
.intermediateThrowEvent().compensateEventDefinition()
.compensateEventDefinitionDone()
.endEvent();
// ready
BpmnModelInstance saga = flow.done();发布于 2021-08-26 17:42:41
您可以在处理补偿的服务任务上激活Asynchronous configure,这允许您在补偿上配置重试选项。
https://stackoverflow.com/questions/68907698
复制相似问题