2016-06-20 7 views
2

ActiveMQのドキュメントstate"ObjectMessageの使用は一般的にお勧めできません"、代わりに何を使用しますか?

それ は、生産者と消費者との間のクラスパスの結合を導入としてのObjectMessage使用量は、一般に、推奨されているが、 のActiveMQはJMS仕様有する

の一部としてそれらをサポートメッセージバスの経験はあまりなく、概念的にはSOAP Webサービスと同様にアプローチしています。そこではコンシューマ向けのサービスインタフェース契約を指定し、同等のクラスプロキシを構築します。私が達成しようとしています何

は次のとおりです。

  1. 出版何らかの方法でメッセージのスキーマを示すいくつかの方法で、
  2. 加入者は、メッセージのスキーマを知って

のObjectMessageはこれを解決問題ではありますが、クラスパスの結合を考慮すると、一番良い方法ではありません。私が見ることができる限り、他のメッセージタイプは、期待されるメッセージフォーマットに関して消費者に最小限のガイダンスを提供する(例えば、消費者は、MapMessageが特定の値タイプを有する特定のキーを含むと仮定しなければならない)。

これを達成する別の合理的な方法がありますか、これは私が追求すべきものでもありませんか?

答えて

0

パブリッシャー/サブスクライバーがスキーマについて知るためのアイディアです。最初のステップは、JSON/protobufを使用してペイロードに構造を確実に組み込むことです。 (XMLの大ファンではない)。そして、データをTextMessage/BytesMessageとして渡します。

パブリッシャー/サブスクライバーがスキーマを伝えることが目的ですが、

  1. サブスクライバは、publishérのjavadocまたはサンプル呼び出しを介してスキーマについて知っています。
  2. パブリッシャとサブスクライバの両方を公開する集中設定が必要です。この設定は、設定を提供するデータベース/アプリケーション内にある可能性があります。効果的な実装は、変更があった場合でもパブリッシャ/サブスクライバが壊れることがないようにします。オブジェクトメッセージアプローチに対するこのアプローチの

利点:

  1. ペイロードのない密結合(すなわち瓶のアップグレード/属性は、などを変更する)
  2. パフォーマンスが大幅に向上 - ここでは、Javaクラスexampleですstringとintを使用するとintとstringをバイトとして直接格納するより3.7倍の時間がかかります。
関連する問題