[英]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.