我有一项接受来自提供商的回调的服务。 动机:我不想失去任何回调(当然除非我的网络无法访问)。
让我们假设不可能发生,我的mysql服务器在一段时间内无法访问, 一旦我多次重试并失败,我想回到辅助持久性存储。
我有什么选择?队列,内存缓存?
答案 0 :(得分:1)
你说你正在收到“回调” - 你还没弄清楚它们是什么。协议是什么?是通过网络吗?
如果它是HTTP,那么我会说最好的方法是,如果你的应用程序无法将数据写入永久存储器,它应该返回一个错误(如果协议中存在,则“稍后再试”)来电者,谁应该稍后再试。
像回调这样的异步进程应始终能够处理下游故障并将其请求排队。
我曾与付款服务提供商合作(Paypal)。如果您无法完全处理请求,只需将错误发送回调用方。
答案 1 :(得分:0)
我推荐某种作业队列服务器。我个人使用Starling并且用它取得了很好的效果。它讲的是memcache协议,因此很容易用作持久队列。 Starling on Github
答案 2 :(得分:0)
我之前在SQLite中放了一个队列。虽然,在我的情况下,它是为了防止丢失到MySQL服务器的网络链接 - 数据是本地生成的。
答案 3 :(得分:0)
您可以拥有一个备份MySQL服务器,并将您的连接切换到该服务器,以防主要服务器发生故障。如果它只是故障转移存储,你可以在应用服务器上本地运行它。