以适当的方式从Ruby Queue弹出消息

时间:2014-12-02 12:06:34

标签: ruby queue fifo

以下是我从Queue发送邮件的代码:

def initialize
    @messages = Queue.new
end

def send_messages_from_queue
    while msg = @messages.pop(true)
        #Pushing data through websocket
    end
rescue ThreadError
    #raised if queue is empty
end

它有效但有一个缺点:如果没有频道订阅者,则消息不会被发送但仍然从Queue中删除,因此会丢失。

如何从队列中获取最后一条消息,但在发送之前不要将其从中删除?

我可以公开内部队列:

@messages.class.module_eval { attr_reader :que }

@messages.define_singleton_method(:first_message) do
   @que.first
end

但这不是正确的方法,也有其自身的缺点:

当我使用pop在一个线程中从队列中取出一条消息时,几毫秒后它将无法用于其他线程,但是当我使用自定义first_message方法时,在我致电pop之前,该消息将可用于任何其他线程。

0 个答案:

没有答案