私は数週間を費やして、次のことができるデーモンを探しました。
- 他のネットワークホストからの任意の数のクライアントを処理します。
- クライアントがIDでサービスを登録できるようにします。
- 他のクライアントがこれらの登録済みサービスに対してRPC呼び出しを行えるようにし、信頼できるエラー処理を行います(そのサービスに登録されているクライアントがデタッチした場合、デーモンは呼び出し元にエラーを報告する必要があります。ハングしたままにしないでください)。
- 他のクライアントがブロードキャストできるイベントを受信するためにクライアントが登録できるようにします。
- シンプルであるほど良い。
私がF/LOSSの世界で見つけた最も近いものは、D-Busです。これは、最初の基準を除いて、これらすべての基準を満たしています。リモート接続では確実に機能しません。私は他のオプション(ESBおよびMQデーモン-0MQおよびRabbitMQで最も多くの時間を費やしています)を調べることに時間を費やしましたが、それらはすべて何らかの形で不十分です:ESBは非常に複雑で、学習曲線が長く、MQデーモンは非常に複雑になる傾向がありますソリューションの半分(ルーティング)を提供し、残りの半分(エラー回復)を不可能ではないにしても非常に複雑なままにする傾向があります。
「サービス「foo」を提供する」と言うクライアントと「サービス「foo」でメソッド「bar」を呼び出したい」と言う別のクライアント以外の素晴らしいルーティング機能は探していません。
このようなものはすでに存在しているようで、私は自分自身を転がすことを躊躇します。
ユースケースは、多くのホストにまたがる多くのプロセスを持つことです。各ホストには、コントロールパネルからこれらのプロセスの存続期間の制御を提供するガバナープロセス/サービスがあります。プロセス自体もサービスとなり、このパネルからのステータスや再構成要求に関する直接の問い合わせが可能になります。秘訣は、プロセスが行き来することです。したがって、エンドポイントの静的構成は、私が本当に気にしたいことではありません。むしろ、各プロセスがデーモンに「私はまあまあサービスを提供しています」と伝えてから、デーモンにクライアント間ルーティングを実行させる責任を負わせたいと思います。
このシステムを開発するために私が本当に欠けているのは、これらすべてのプロセス間でRPC要求をルーティングできるものだけです。そのようなデーモンはありますか、それとも私のニーズにより適した他のモデルがありますか?