我有一个从类(Popsicles)生成的对象,它被传递给另一个类(PopsicleProcessor),只有Popsicle对象的ID,“保证”(UUID)是唯一的。如何从PopsicleProcessor类访问Popsicle对象而不必做一些坏事,比如将整个Popsicle对象作为参数传递?
我的应用程序没有数据库来查找这些对象,它们纯粹存在于应用程序的内存中,直到处理完毕为止。
我真的不知道如何实现这一点,特别是因为它被卸载到Resqueue队列上,该队列将再次启动应用程序的整个实例 - 因此传递对象本身会导致大量性能损失(缩放),据我所知。
一般来说,如何做到这一点(因为Resqueue根本不应该有所作为)。
我希望能够从其他类访问对象实例变量和方法。
这是我现在正在做的事情的摘录,但这不起作用。
popsicles.rb
class Popsicles
require "securerandom"
@someID
def initialize params
@someID = SecureRandom.uuid
end
def doSomething
Resque.enqueue( popsicleProcessor, @someID )
end
end
popsicles_processor.rb
# Worker class
class PopsiclesProcessor
# Requires a @queue instance variable
@queue = :popsicle_queue
# Needs to take same argument we passed to enqueue method
def self.perform( popsicle_id )
# Get the object somehow
# Now we can call other methods like changeFlavour, or whatever
end
end
答案 0 :(得分:2)
您的工作人员在不同的进程中运行实际上是相关的,因为它将拥有自己的内存空间,而无法访问在主应用程序进程中创建的Popsicle对象。如果你只是想用另一个进程中的ID加载它们,你需要有一些方法来持久化Popsicle对象。如果您不能使用数据库,则必须序列化对象或将其数据的各个组件传递给工作人员,以便可以在工作进程中从头开始重构。