メッセージ バスは複雑なものであり、バスに接続されている単一のコンポーネントのメッセージ キューの表現に簡単に要約することはできません。
コメントで述べたように、std::queue<MessageType,std::list<MessageType> >
スレッド セーフ以外の主なユース ケースを満たす必要がありますが、考慮すべきことが他にもたくさんあります。
スレッド セーフなキュー実装のサンプルを次に示します: STTCLのEventQueue.h。値として配置する場合は、特定のアイテムの操作を含め、ニーズに適合する必要があります。std::queue<__T__,std::list<__T__> >
STTCL_DEFAULT_DEQUEIMPL(__T__)
find()
アプリケーションのユース ケースに応じて、特定の種類のメッセージの配信と購読について、さまざまなメッセージング パターンから選択する必要があります。
これらのトピックに取り組もうとしていたとき、メッセージング パターンの EAI カタログが非常に役立つことに気付きました。
これに加えて: 常に (常に!!! はい! 3 つの感嘆符)は、トランスポートからメッセージ ペイロードを出発します!!
メッセージング パターンの注目すべきトランスポート システムは0MQで、さまざまな言語のバインディングを提供します。ただし、C++ 実装 (生のソケット ベースの実装または s.th. like を含むboost::asio
) で使用できるものもあります。
メッセージ ペイロードの設計に関しては、Google プロトコル バッファが最も便利で、移植性があり、分散システム (組み込みを含む) のすべての要件に対して柔軟であることがわかりました。