C# 配置公共交通重试时要处理哪些异常

C# 配置公共交通重试时要处理哪些异常,c#,masstransit,C#,Masstransit,在公共交通消费者中配置UseScheduledRedelivery时。应该处理什么的最佳实践是什么 处理异常是否过度?是否有可能从中恢复的异常列表 重新交付是第二级重试。这意味着它处理第一级重试(重试策略)无法恢复的异常 基本上,您可能希望重试除由消息数据引起的异常以外的所有操作。但是,即使是空引用异常也可能会重试。例如,您有一个数据库,您试图获取一条记录并获取null。这可能是因为记录还不存在,但它将在稍后出现,因为队列中有一条消息要创建它。因此,种族条件可能导致此类例外 但是,第二级重试是不

在公共交通消费者中配置UseScheduledRedelivery时。应该处理什么的最佳实践是什么


处理异常是否过度?是否有可能从中恢复的异常列表

重新交付是第二级重试。这意味着它处理第一级重试(重试策略)无法恢复的异常

基本上,您可能希望重试除由消息数据引起的异常以外的所有操作。但是,即使是空引用异常也可能会重试。例如,您有一个数据库,您试图获取一条记录并获取null。这可能是因为记录还不存在,但它将在稍后出现,因为队列中有一条消息要创建它。因此,种族条件可能导致此类例外

但是,第二级重试是不同的。例如,您希望使用它们来克服资源不足的问题(繁忙的数据库或其他)。这些异常非常具体,如网络超时异常或数据库超时异常。但是没有“列表”,您需要查看您的系统设计,以确定在哪里应用第一级重试,在哪里使用第二级重试,以及哪些异常由它们处理


我们对所有异常使用重试,对极少数异常使用重新交付,而不是在所有服务中。通常,我们在获得数据库超时后重新提交。

通常;仅处理设计中预期的异常。抛出所有其他异常。处理异常的要点是,您可以根据需要采取相应的行动。如何处理它本质上是由你来决定的。如果您不想处理异常,或者遇到异常时不知道该怎么办,那么就不要处理它。抛出异常本质上意味着无法绕过遇到的错误状态(因此抛出异常是为了停止执行方法,因为它不再能够产生任何有意义的结果)。我所说的是在分布式系统中处理重试尝试。如果你陷入僵局。100毫秒后再试一次,它可能会工作。如果消费者正在重新启动。5分钟后,它可能会停止计时并工作。有大量您不知道的异常,您可以通过尝试来恢复。