0

我有一项接受来自提供商的回调的服务。 动机:我不想丢失任何回调(当然,除非我的网络无法访问)。

假设发生了不可能的事情,并且我的 mysql 服务器在一段时间内无法访问,我想在重试几次但失败后回退到辅助持久性存储。

我有哪些选择?队列,内存缓存?

4

4 回答 4

1

你说你正在接收“回调”——你还没有弄清楚它们是什么。什么是协议?是否通过网络。

如果是 HTTP,那么我会说最好的方法是,如果您的应用程序无法将数据写入永久存储,它应该向调用者返回一个错误(如果协议中存在“稍后再试”),谁应该稍后再试。

像回调这样的异步进程应该始终能够处理下游故障并将其请求排队。

我曾与一家支付服务提供商合作过(Paypal)。如果您无法完全处理请求,只需将错误发送回调用方。

于 2009-02-04T07:46:08.437 回答
0

我推荐某种作业队列服务器。我个人使用 Starling 并取得了很好的效果。它使用 memcache 协议,因此很容易用作持久队列。 Github 上的 Starling

于 2009-02-04T03:13:18.770 回答
0

我之前已经为此在 SQLite 中放置了一个队列。不过,在我的例子中,它是为了防止与 MySQL 服务器的网络链接丢失——数据是本地生成的。

于 2009-02-04T03:26:14.140 回答
0

您可以拥有一个备份 MySQL 服务器,并将连接切换到该服务器,以防主要服务器出现故障。如果它只是一个故障转移存储,您可能会在应用程序服务器上本地运行它。

于 2009-02-04T03:27:18.397 回答