我目前正在构建一个带有 rails 进程和多个工作进程的架构,这些进程需要被告知某些事件(如对象的创建)。
Rails
| API Worker
+----------o------o--------o------ - - -
Some other
daemon
我想做以下
class Article
after_creation do
MessageBus.send type: "article-created", id: self.id
end
end
虽然进程(API、Worker、Daemons,...)只是订阅消息总线,并在消息进入时调用一个块。
MessageBus.subscribe do |msg|
if msg['type'] == 'article-created'
# if this is my websocket daemon, I would push the article to the browser
# if this is my indexing daemon, I would reindex the full-text search
# if this is ... you get the deal.
end
end
目前,我正在使用本地 unix 域套接字,我将 JSON 推送到其中UNIXSocket
并使用EventMachine.start_unix_domain_server
. 但这只允许双向通信。我也考虑过使用 resque,但这更像是一个消息队列,而我需要总线。它依赖于redis。我很确定一定有一个 gem,它在 ruby 中实现了一些消息总线,但是谷歌搜索并没有导致任何结果