9.4.3. 设置超时
在 Saga EIPs 设置超时可确保在机器失败时,Saga 不会永久处于停滞状态。Saga EIP 实施在未明确指定的所有 Saga EIP 上设置了默认超时。当超时到期时,Saga EIP 将决定 取消 Saga (并补偿所有参与者),除非之前已采取不同的决定。
可以在 Saga 参与者上设置超时,如下所示:
from("direct:newOrder") .saga() .timeout(1, TimeUnit.MINUTES) // newOrder requires that the saga is completed within 1 minute .propagation(SagaPropagation.MANDATORY) .compensation("direct:cancelOrder") .completion("direct:completeOrder") // ... .log("Order ${body} created");
所有参与者(如信贷服务、订单服务)都可以设置自己的超时。这些超时的最小值会在 saga 一起组成时作为 saga 的超时时间。也可以在 Saga 级别指定超时,如下所示:
from("direct:buy") .saga() .timeout(5, TimeUnit.MINUTES) // timeout at saga level .to("direct:newOrder") .to("direct:reserveCredit");