私は現在、レールプロセスと、(オブジェクトの作成のような)特定のイベントを通知する必要がある複数のワーカープロセスを備えたアーキテクチャを構築しています。Rubyメッセージバスの宝石はありますか?
プロセス(API、労働者、デーモンは、...)だけで、メッセージバスに加入し、ブロックが時にメッセージと呼ばれている間、私は、次のclass Article
after_creation do
MessageBus.send type: "article-created", id: self.id
end
end
を行うにはしたいと思い
Rails
| API Worker
+----------o------o--------o------ - - -
Some other
daemon
入っています。
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
を現在、私はUNIXSocket
でJSONを押してEventMachine.start_unix_domain_server
でそれを取得し、ローカルのUNIXドメインソケットを使用しています。しかし、これは双方向通信だけを可能にします。私はresqueの使用についても考えましたが、バスが必要な間にメッセージキューが増えています。それは赤目にかかっています。私は確かにルビーのいくつかのメッセージバスを実装している宝石がなければならないと確信していますが、グーグルでは結果につながっていません
EventMachineチャンネルを試しましたか? EventMachineチャンネルの場合、http://eventmachine.rubyforge.org/EventMachine/Channel.html – tommasop
+1。 (作業者がマスタと同じプロセス空間で実行している場合)もう一つ考慮すべきことは、RubyはObserverパターン[Observable](http://www.ruby-doc.org/stdlib-1.9 .3/libdoc/observer/rdoc/Observable.html) –
参照:https://github.com/SamSaffron/message_bus –