【发布时间】:2018-02-22 02:30:19
【问题描述】:
我正在使用用 C# 编写的客户端应用程序向公司交换服务器发送大量电子邮件。
客户端应用程序超时(而不是服务器)可能会发生,并且确实如此。 由于无法知道服务器是否完成了请求,这种情况下如何处理重试?
没有涉及可用于避免重复的 ID。 设置长时间超时甚至无限超时都不是一个好策略。
我正在使用指数退避算法进行重试。在这种情况下,它应该只发送一个副本,因为下次它会等待更长的时间。
我认为没有子弹教授解决方案。无论如何,由于它是此类项目的第一个项目,我需要检查是否有人有我想念的解决方案。
更新: 交易所正在做中继。我正在使用 SmtpClient 发送电子邮件。 问题是服务器可以发送 250 Ok 消息,但接收方始终没有收到,然后重试。这是我在这篇文章中试图解决的唯一问题。
在 Rest 服务中,推荐的方法是使用并发错误。如果客户端发布某些内容并获得“409 - 冲突”状态,则表示该消息已存储在服务器上。但是为了让这种情况发生在那里,它是由客户端创建的消息的密钥,并且是消息的一部分。 SMTP 似乎没有可以防止这种情况发生的机制。
【问题讨论】:
-
你找到合理的解决方案了吗?
-
没有。我不能保证没有重复。无论如何,到目前为止,使用指数退避策略似乎可以正常工作。我不知道有任何重复。将超时值设置得越高,就会越不喜欢它。这就是路的尽头。
标签: error-handling smtp exchange-server connection-timeout retrypolicy