将要发布到 REST 的项目排队 API
Queuing items for POSTing to a REST API
我正在构建一个将 CSV 的内容解析为多个 "readings" 的应用程序。然后它 post 将这些读数发送到 REST API 服务器,并在服务器上将其添加到数据库中。
到目前为止一切顺利(上面的工作正常)。但是,我意识到服务器偶尔可能会出现连接问题(延迟,或者 API 因任何原因出现故障)。
为了解决这个问题,我打算使用 Sidekiq 进行异步传输。但是,我有几个问题:
我是否最好创建一个 ActiveJob 来执行 post,然后在解析 CSV 时将此作业排队?我想,如果存在连接问题,它最终会按照添加顺序恢复?
我是否需要告诉 Sidekiq "retry" 这份工作,还是会自动发生?
最后,由于 Sidekiq 使用 Redis,是否应该启用持久化,以便如果应用服务器崩溃而队列中有项目不会丢失?
还有什么要考虑的吗?或者更好的方法来解决这个问题?
有两种情况
1) 您将把 CSV 文件的完整处理放在作业中,在这种情况下,我认为它不会完美地工作,因为如果作业失败,它将再次遍历所有行。除非您通过在 CSV 中添加另一列来标记这些行,比如读取。
2) 你在 Sidekiq 中将每一行添加为一个单独的作业,我认为这样做的一个缺点是你最终可能会创建太多作业,以防你有大的 CSV 文件,但它会节省一个CSV 方面的大量处理。
我正在构建一个将 CSV 的内容解析为多个 "readings" 的应用程序。然后它 post 将这些读数发送到 REST API 服务器,并在服务器上将其添加到数据库中。
到目前为止一切顺利(上面的工作正常)。但是,我意识到服务器偶尔可能会出现连接问题(延迟,或者 API 因任何原因出现故障)。
为了解决这个问题,我打算使用 Sidekiq 进行异步传输。但是,我有几个问题:
我是否最好创建一个 ActiveJob 来执行 post,然后在解析 CSV 时将此作业排队?我想,如果存在连接问题,它最终会按照添加顺序恢复?
我是否需要告诉 Sidekiq "retry" 这份工作,还是会自动发生?
最后,由于 Sidekiq 使用 Redis,是否应该启用持久化,以便如果应用服务器崩溃而队列中有项目不会丢失?
还有什么要考虑的吗?或者更好的方法来解决这个问题?
有两种情况
1) 您将把 CSV 文件的完整处理放在作业中,在这种情况下,我认为它不会完美地工作,因为如果作业失败,它将再次遍历所有行。除非您通过在 CSV 中添加另一列来标记这些行,比如读取。
2) 你在 Sidekiq 中将每一行添加为一个单独的作业,我认为这样做的一个缺点是你最终可能会创建太多作业,以防你有大的 CSV 文件,但它会节省一个CSV 方面的大量处理。