私は現在、レールプロセスと複数のワーカープロセスを備えたアーキテクチャを構築しています。これらのプロセスには、特定のイベント(オブジェクトの作成など)を通知する必要があります。
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、ワーカー、デーモンなど)がメッセージバスにサブスクライブしている間、メッセージが着信するとブロックが呼び出されます。
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に依存します。ルビーにメッセージバスを実装する宝石があるはずですが、グーグルしても結果は得られませんでした