简体   繁体   English

Ruby on Rails 数据库队列

[英]Ruby on rails database queue

In my ruby on rails web app I want to queue DML operations.在我的 ruby​​ on rails web 应用程序中,我想对 DML 操作进行排队。

Now I do not know if it would be best use an existing queue (like RabbitMQ) or to write my own but I guess writing my own would be a good idea.现在我不知道最好使用现有队列(如 RabbitMQ)还是自己编写队列,但我想编写自己的队列是个好主意。

Do you have any tips on how to write a database queue and integrate it in ruby on rails?关于如何编写数据库队列并将其集成到 ruby​​ on rails 中,您有什么提示吗?

Thanks.谢谢。

It's quite often you need some consumer-producer implementation on your own.您经常需要自己实现一些消费者-生产者实现。 You can create own processor and tasks, it's not so hard.您可以创建自己的处理器和任务,这并不难。 Here is an example you can use.这是您可以使用的示例。 Just implement own backend logic using MySQL.只需使用 MySQL 实现自己的后端逻辑。

module MyJobs
    def self.backend
      @backend
    end

    def self.backend=(backend)
      @backend = backend
    end

  class Processor
    def self.start(concurrency = 1)
      concurrency.times { |n| new("Processor #{n}") }
    end

    def initialize(name)
      thread = Thread.new do
        loop do
          payload = MyJobs.backend.pop
          worker_class = payload[:worker]
          worker_class.new.perform(*payload[:args])
        end
      end

      thread.name = name
    end
  end

  module Worker
    module ClassMethods
      def perform_async(*args)
        MyJobs.backend.push(worker: self, args: args)
      end
    end
  end
end

MyJobs.backend = Queue.new
MyJobs::Processor.start(5)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM