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