我想要一些意见,我正在构建一个具有以下标准功能的 web 应用程序:
我们将针对邮件服务器宕机的情况,使用示例 1 来查看以下四种策略。
事务性和同步性 发送电子邮件失败,用户会看到错误消息,表示无法创建他们的账户。应用程序会变得缓慢和不响应,因为应用程序需要等待连接超时。由于事务回滚,因此不会在数据库中创建帐户。
事务性和异步性 此处的事务性指发送电子邮件到 JMS 队列或保存在数据库表中,供另一个后台进程抓取并发送。
帐户将在数据库中创建,电子邮件将被发送到 JMS 队列以供稍后处理。事务成功提交。用户会看到一条消息,表示他们的帐户已经创建,并要求他们检查电子邮件以获取确认链接。在这种情况下,由于某些其他错误,可能永远不会发送电子邮件,但是向用户告知电子邮件已发送给他们。如果必须调用应用程序支持来诊断电子邮件问题,则可能会延迟向用户发送电子邮件。
非事务性和同步性当用户在数据库中被创建后,应用程序在尝试发送带有确认链接的电子邮件时出现超时错误。用户会收到一个错误消息,提示发生了错误。由于等待连接超时,应用程序变得缓慢且无响应。
- 通过填写表单和提交表单来注册账户。
- 收到包含确认链接的电子邮件。
- 点击链接以确认新帐户并登录。
- 在你的网站上注册新用户 - 在数据库中创建新用户并向他们发送包含确认链接的电子邮件。
- 用户将 bug 或问题分配给其他人 - 更新问题并发送电子邮件通知。
我们将针对邮件服务器宕机的情况,使用示例 1 来查看以下四种策略。
事务性和同步性 发送电子邮件失败,用户会看到错误消息,表示无法创建他们的账户。应用程序会变得缓慢和不响应,因为应用程序需要等待连接超时。由于事务回滚,因此不会在数据库中创建帐户。
事务性和异步性 此处的事务性指发送电子邮件到 JMS 队列或保存在数据库表中,供另一个后台进程抓取并发送。
帐户将在数据库中创建,电子邮件将被发送到 JMS 队列以供稍后处理。事务成功提交。用户会看到一条消息,表示他们的帐户已经创建,并要求他们检查电子邮件以获取确认链接。在这种情况下,由于某些其他错误,可能永远不会发送电子邮件,但是向用户告知电子邮件已发送给他们。如果必须调用应用程序支持来诊断电子邮件问题,则可能会延迟向用户发送电子邮件。
非事务性和同步性当用户在数据库中被创建后,应用程序在尝试发送带有确认链接的电子邮件时出现超时错误。用户会收到一个错误消息,提示发生了错误。由于等待连接超时,应用程序变得缓慢且无响应。
当邮件服务器重新启动并且用户再次尝试注册时,他们会被告知他们的帐户已存在但未经确认,并可以选择重新发送电子邮件。
非事务性和异步 与事务性和异步的唯一区别是,如果发送电子邮件到JMS队列或将其保存在数据库中时出现错误,则仍会创建用户帐户,但直到用户再次尝试注册之前,电子邮件才不会被发送。
我想知道其他人在这里做了什么?除了上面提到的4种解决方案外,您还能推荐其他解决方案吗?如何合理地处理这个问题?我不想为处理我的邮件服务器崩溃的(希望很少发生)罕见情况而过度设计系统!
最简单的方法是同步编码,但这种方法还有其他的缺陷吗?我想知道是否有最佳实践,但我在搜索引擎上找不到太多相关信息。