ETL ツールを使用してデータのバッチを取得するシステムの設計に取り組んでいます。つまり、1 つまたは複数のテーブルの挿入/更新/削除を行い、後で複数のクライアントによって処理されるようにそれらを JMS トピックに配置します。現在、トピックの各メッセージは単一のレコード I/U/D を表し、バッチの終わりを区切る特別なメッセージがあります。単一のトランザクションでバッチを処理することが重要であるため、特別なトランザクションで区切られた一連のメッセージを持つことは理想的ではありません。メッセージを発行するセッションと受信するセッションの両方が、複数のメッセージ用に設計されている必要があります。バッチ区切りメッセージは厄介な解決策であり (メッセージを受信するたびに、それが最後かどうかを確認する必要があります)、非常にエラーが発生しやすくなります。システムのデバッグと保守が困難です。トピックに関するメッセージの数はすぐに膨大になります (最大で数百万)。
さて、アーキテクチャを改善するための次の自然なステップは、すべてのレコードを単一の JMS メッセージにパックすることだと思います。これにより、メッセージが受信されたときに単一のトランザクションが含まれ、障害を簡単に検出でき、「孤児」がなくなります。トピックに関する記録など。そうすることには利点しかありません。ここに私の質問があります:
- このような詰め込まれたメッセージを作成する最良の方法は何ですか? 私の選択肢は
StreamMessage
、ByteMessage
またはObjectMessage
です。テキスト メッセージとマップ メッセージは除外しました。最初のメッセージではテキストの解析が必要になり、パフォーマンスが低下するためです。StreamMessage
カスタムシリアライゼーションコードを書くには多くの作業が必要になりますが(ByteMessageの場合はさらに悪い)、非常にコンパクトに見えるので、私はちょっと傾いています。ObjectMessage についてよくわかりませんが、どのように機能しますか? これに対するすぐに使えるソリューションはありますか? - メッセージごとに許可される最大サイズは? 数百 KB または数 MB のオーダーでしょうか?
考えてくれてありがとう!
ジョバンニ