在我的Rails应用程序中实现全局队列数据结构

时间:2013-03-29 11:09:01

标签: ruby-on-rails ruby-on-rails-3.2 global-variables

我有一个Ruby on Rails应用程序,我需要在其中维护一个id队列。我尝试使用全局数组作为队列,但后来读到,如果我的应用程序的多个实例运行,Web应用程序中的全局变量将不再是全局变量。那我怎样才能维护一个应用程序范围的队列?

这是我的ApplicationController的外观:

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :update_queue, :get_next_free_agent
  $agent_queue = []
  def update_queue(agent)
    if agent.status == "AVAILABLE"
        if agent_queue.find_index(agent.reg_id) == nil
            $agent_queue.push(agent.reg_id)
        end
    else
        $agent_queue.delete(agent.reg_id)
    end
  end

  def get_next_free_agent
    return agent_queue.shift
  end
end

这也不起作用,在阅读全局变量如何区分坏主意之后,我也不想再使用它了。请提供替代解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

远远看来你的问题似乎可以通过像Resque这样的消息队列系统来解决。

如果你不打算沿着那条路走下去,那就把数组存放在一个键值存储中,它提供原子弹出并推送数组(比如redis),这样你就不必担心一个进程访问数组