Ruby on rails Rails—将数据从后台作业传递到主线程

Ruby on rails Rails—将数据从后台作业传递到主线程,ruby-on-rails,multithreading,communication,Ruby On Rails,Multithreading,Communication,我在我的应用程序中使用了一个后台作业系统(Sidekiq)来管理一些不应该阻塞UI的繁重工作 我希望在作业完成时将数据从后台作业传输到主线程,例如作业的状态或作业完成的数据 目前,我使用Redis作为主线程和后台作业之间的中间件。它存储数据、状态,。。。这样主线程就可以读取后面发生的事情 我的问题是:这是管理计划作业和主线程之间的数据(使用Redis或键值缓存)的一种好做法吗?还有其他程序吗?哪一个是最好的,为什么呢?是你们要找的东西。 您只需在通道上使用subscribe命令订阅主线程,在该通

我在我的应用程序中使用了一个后台作业系统(Sidekiq)来管理一些不应该阻塞UI的繁重工作

我希望在作业完成时将数据从后台作业传输到主线程,例如作业的状态或作业完成的数据

目前,我使用Redis作为主线程和后台作业之间的中间件。它存储数据、状态,。。。这样主线程就可以读取后面发生的事情

我的问题是:这是管理计划作业和主线程之间的数据(使用Redis或键值缓存)的一种好做法吗?还有其他程序吗?哪一个是最好的,为什么呢?

是你们要找的东西。 您只需在通道上使用subscribe命令订阅主线程,在该通道中,工作线程将使用publish命令宣布作业状态。 因为您的环境中已经有了Redis,所以您不需要其他任何东西来启动它。

是您正在寻找的东西。 您只需在通道上使用subscribe命令订阅主线程,在该通道中,工作线程将使用publish命令宣布作业状态。
由于您的环境中已经有了Redis,因此无需其他任何东西即可启动。

这里是我过去使用过的两个其他选项:

  • Unix套接字。这是非常复杂的,创建和关闭连接是一件麻烦事,但它确实有效。另外,清理套接字和与文件系统交互也有点复杂。我不推荐
  • 标准关系数据库管理系统。这非常容易实现,并且对于我的用例来说是有意义的,因为繁重的工作与特定的模型相关联,所以流程的状态可以存储在该表的列中。这也意味着,就一致性而言,您只需要担心一家门店
我也使用了memcached,它和Redis做了同样的事情,如果你感兴趣的话,可以讨论比较它们的特性。我发现这很管用


如果Redis为你工作,那么我会坚持下去。就我看来,这是解决这个问题的合理办法。唯一可能导致问题的事情是生成唯一的密钥(可能没有那么难),并确保清除未使用的缓存项

这里是我过去使用过的两个其他选项:

  • Unix套接字。这是非常复杂的,创建和关闭连接是一件麻烦事,但它确实有效。另外,清理套接字和与文件系统交互也有点复杂。我不推荐
  • 标准关系数据库管理系统。这非常容易实现,并且对于我的用例来说是有意义的,因为繁重的工作与特定的模型相关联,所以流程的状态可以存储在该表的列中。这也意味着,就一致性而言,您只需要担心一家门店
我也使用了memcached,它和Redis做了同样的事情,如果你感兴趣的话,可以讨论比较它们的特性。我发现这很管用


如果Redis为你工作,那么我会坚持下去。就我看来,这是解决这个问题的合理办法。唯一可能导致问题的事情是生成唯一的密钥(可能没有那么难),并确保清除未使用的缓存项

感谢你带我去酒吧/酒吧,我不知道。您认为这是一个好的实践(使用Redis)吗?你知道其他在后台作业和主线程之间传输数据的做法吗?还有。在发布/订阅之前,我只使用服务器轮询。酒吧/酒吧绝对更好,因为它可以让你避免不必要的请求。+1多亏了给我看酒吧/酒吧,我才不知道。您认为这是一个好的实践(使用Redis)吗?你知道其他在后台作业和主线程之间传输数据的做法吗?还有。在发布/订阅之前,我只使用服务器轮询。酒吧/酒吧绝对更好,因为它可以让你避免不必要的请求。+1谢谢你的完整答案!我想我会继续使用Redis;)+谢谢你完整的回答!我想我会继续使用Redis;)