示例场景:
付款处理和电子产品交付交易。
需求
重要性顺序
Sidekiq 是否适合此类任务关键型流程? sidekiq 能否满足所有这些要求?或者你会推荐其他替代品吗?你能给我指出一些关于 Rails 支付处理的最佳实践吗?
Note: The question is not regarding whether to use stripe or ActiveMerchant for payment handling. It is more about the safest way to programmatically execute those processes in the background.
最佳答案
是的,Sidekiq 可以满足所有这些要求。
要以串行方式一次处理一个事务,您可以启动一个并发为 1 的 Sidekiq 进程,该进程仅适用于该队列。该进程将按顺序一次一个地处理队列中的作业。
对于进入失败队列的失败任务,您需要使用 Sidekiq Failures gem 并确保为该任务关闭重试。
为保证每个任务至少执行一次,您可以购买Sidekiq Pro并使用可靠获取。如果 Sidekiq 崩溃,它会在启动备份时执行任务。这假设您将设置监控以确保 Sidekiq 进程保持运行。您可能还想让您的任务具有幂等性,因此它不会两次写入相同的事务。 (理论上,在您的数据库事务提交之后,但在 Sidekiq 向 Redis 报告任务已完成之前,该进程可能会崩溃。)
如果使用 Ruby 是一个限制,Sidekiq 可能是你最好的选择。我在 Ruby 中使用了几种不同的排队系统,但它们都没有 Sidekiq 那样的可靠性保证。
关于ruby-on-rails - Sidekiq 是否适用于高度关键任务、需要一次性执行保证、需要单线程执行的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916022/