我正在编写一个 C# Web API 服务器应用程序,并将通过 Mirth HTTP Sender 目标向它发送 JSON。这篇文章是关于如何处理错误情况的。具体来说,我要处理三种情况:
- 有时我们为了系统升级或维护,让 C# 应用服务器短时间离线,Mirth 根本无法连接。我希望 Mirth 将所有消息按顺序排列,当服务器可用时,按接收顺序处理它们。
- 服务器接收到请求,但由于请求的内容有问题(例如缺少必填字段)而拒绝了它。根据 REST 约定,服务器将返回 400 级 HTTP 响应。此消息每次提交都会被拒绝,因此不应重新发送;只需记录失败并继续下一条消息。
- 服务器收到请求,但服务器出现问题,服务器返回 HTTP 500 Server Error 响应。这将是适当的响应,例如,当服务器环境中出现问题时。一个真实的例子是 Web API 服务器正在运行,但有人重新启动了数据库服务器。REST 约定建议我们继续重新发送消息,直到暂时性问题得到解决。
对于#1,最初我让它在失败/总是排队,但似乎响应转换器从未针对排队的消息运行(至少,调试语句从未显示在日志中)。我已关闭排队,并将其设置为每十秒重试一个小时,这似乎给出了所需的行为。我是在正确的轨道上,还是错过了什么?
对于 #2 和 #3,返回任何 HTTP 400 或 500 错误会调用 1 小时重试。我想要的是对 500 个错误应用 1 小时重试,而不是 400 个错误。我已经responseStatus = SENT
在响应转换器中尝试过,但是响应转换器只运行一次,在一小时过后,而不是每次重试。
这似乎是一个常见问题,但我没有找到解决方案。你们其他人是如何处理这个问题的?