我目前正在创建一个连续的webjob,它将对API进行轮询,然后将消息转发到Azure Service Bus。我设法让这个工作得很好,但我有一个问题;如果我的应用程序因任何原因崩溃了怎么办?如果有未捕获的异常或出现问题,该应用程序将停止运行。我如何让它再次运行?
我创建了一个测试应用程序,它将每次向服务总线发送一条消息,然后在第11条消息中,由于故意放置NullReferenceException,它将崩溃。我这样做是为了在应用程序崩溃时调查行为。
应用程序会在前10秒内正常运行(如预期的那样)。消息正在发送,一切都很好。然后在第10秒之后,当异常发生时,没有任何反应。 Azure中没有登录说有异常,没有重启 - 没有。它只是站在那里“运行”,但不再发送消息。
我该如何处理?如果应用程序失败,则必须能够重新启动。有没有标准的方法来做到这一点?最佳做法?
任何帮助将不胜感激:)
答案 0 :(得分:1)
总是很好地处理系统中的大多数故障情况,而不是让托管环境对故障做出反应。
我的建议是检查代码中的异常代码,比如可执行脚本中的任何try catch块,以捕获不同类型的故障情况,而不是抛出异常,自行记录或在需要时进行任何重试操作
示例,当您收到要处理的垃圾数据且失败时。然后你可以尝试再次进行操作,例如。 3次,然后最终将日志推送到deadletter帐户,以手动处理此类垃圾输入。并且不要通过抛出异常来停止流程,而是通过记录需要手动干预的消息来处理它自己。
在任何GUI或Web应用程序中,如果存在异常,则用户点击重新启动流程,系统将响应。但在这里它是一个后台处理器,它是理想的避免所有这样的控制流阻止器。
希望这会有所帮助。