ruby-on-rails - 如何在后台处理事务时向用户显示 'your payment is processing...' 页面?

标签 ruby-on-rails payment-gateway payment resque

我经营一家网店,流量非常大。最近,由于支付网关出现某种问题,整个系统在一次大型促销事件中陷入停顿,他们的 API 响应需要 17 秒才能响应,而不是正常的 2-3 秒。有数百人同时尝试购买。这导致生产集群中每个 Web 服务器中的所有 Web 工作线程都被捆绑起来等待来自支付网关的 API 响应。整个生产集群被锁定,无法提供任何页面。

此问题的一个解决方案是使用 Resque 在后台处理付款。 Web 服务器会立即向用户返回一个响应,例如“您的付款正在处理中……”Web 服务器将能够继续处理下一个 Web 请求。

问题是在处理完付款后继续结账。我无法使用 AJAX 来轮询交易是否已完成,因为许多客户没有 JavaScript。我不能依赖它。我不想使用 JavaScript 或任何类型的可靠性低的服务器推送技术,因为如果一定比例的结帐在“正在处理...”页面上停滞不前,这会造成代价高昂的客户支持问题。

我如何设计页面流,以便可以在后台可靠地处理交易?

最佳答案

研究基于事件的解决方案(例如 EventMachine)并让它处理这些请求。在这种情况下,标准的 RoR 服务器将全部崩溃。使用 javascript 进行某种后端处理绝对是解决此问题的最简单方法,但如果这不是一种选择,我会探索将该流程转移到更适合处理 API 等问题的东西中,例如永远不会响应的问题。

关于ruby-on-rails - 如何在后台处理事务时向用户显示 'your payment is processing...' 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577233/

相关文章:

ruby-on-rails - 没有外键的 ActiveRecord 关联

php - 我如何在我的成功页面上知道客户paypal交易是否成功

paypal - 通过 Paypal 向我的客户收取随机金额

laravel - 获取条纹信用卡图像/图标 url api?

laravel - 带确认方法手动的 Stripe PaymentIntent 每次都会失败

ruby-on-rails - 将 Rails 中特定列中的所有行相加?

ruby-on-rails - 使用 Rails to_prepare 事件

sql - Rails 根据相关模型的属性对模型进行排序

php - 获取自定义支付网关数据作为 Woocommerce 3 中的设置

ios - 支付你的钱 nsurl 错误空字符串