有的时候需要做一些操作,用到了一些复杂的 gem,比如 pdf 处理,视频音频处理, 如果放到 rails 项目里面,项目就变得好大了,并且内存上面会不太可控。
考虑一个方案,可以采用以下的调用方式:
在 rails 里面使用:
PdfWorker.process(filename)
然后里面会分配任务到另外的 worker。
和 resque 不一样的是,这个调用是同步的,类似 rpc:https://www.rabbitmq.com/tutorials/tutorial-six-ruby.html
任务分发还是用 resque,sender 发送任务到一个 redis 队列。 worker 处理完之后,把数据塞到一个 hash map 之中,key 用一个随机生成的 id。 然后 sender 就阻塞监听结果是否生成。
请问大家这样的方案怎么样呀?