2016-09-22 5 views
1

私はセンサーを表すアクターを持つAkkaシステムを持っています。センサが観測を行うたびに、対応する俳優が内部のパブ/サブトピックでこの観測をパブリッシュします。これにより、観測の用途を拡張することが容易になります(1人の俳優がDBに保存し、別の人がDBTブローカーに公開するなど)Akkaの「Distributed Publish Subscribe in Cluster」でメッセージが受信されたトピックを知ることは可能ですか?

メッセージを受信したトピックを受信者に知らせるメッセージにトピックを含めることです。しかし、これは私にとっては悪いデザインのようです。 AkkaのActorで現在のメッセージがどのトピックで受信されたかを確認することは可能ですか?

Distributed Publish Subscribe on Cluster(http://doc.akka.io/docs/akka/current/java/distributed-pub-sub.html)のAkkaのドキュメントには、私が見る限り、これは言及されていません。

+0

Akkaフレームワークについてはわかりませんが、一般的なパブリッシャ/サブスクライバのメッセージングでは、メッセージ自体にメタ情報を含めることができます。この場合、meta-infoの属性は論理的なトピック名になります。デザインの観点から言えば、それを置くときに悪いdssignではないかもしれませんが、論理トピック名が動的であれば、名前を取るようにActorを設定する必要があります。 – Ironluca

+0

メッセージがメッセージに送られるトピックを重複した情報に含めることは、デザインが悪いかもしれないと主張する理由は、トピックがどこかで利用可能な場合は、そうです。 – hanshenrik

+0

情報を複製することは悪いことではありません。システムの複雑さを軽減するための情報を複製し、メンテナンス性を向上させることで、DBの通常のケースを多くのシステムで実現できますデータ検索やクエリが複雑になり、時にはパフォーマンスのボトルネックが発生するために再生されない – Ironluca

答えて

0

私が知る限り、これはDistributed Pub/Subの機能として組み込まれていません。おそらくあなたは、あなたがそれを制約することができるようにMessageTypeのためにスーパータイプのいくつかの並べ替えを作りたいと思い、余分な安全のため

case class PubSubEnvelope[MessageType](topic: String, payload: MessageType) 

、およびいくつか列挙型のような構造のために:私は通常、封筒のいくつかの並べ替えを行うことで、これを解決するだろうStringの代わりにtopicです。

+0

これはトピック構造に適しているため、sender()参照を使用して問題を解決することができました。しかし、一般的には、おそらくこれを行う方法です。ありがとう! – hanshenrik

関連する問題