XMPP は、リアルタイム通信のためのオープンで拡張可能な標準です。
XMPP には、そのrfcで定義されているコアが付属しています。これは、インスタント メッセージングを実行し、プレゼンス情報を交換するための基本的なプロトコルを記述しています。ただし、XMPP が本当に優れているのはその拡張性です。XMPP は、通信のプロトコルを作成するためのビルディング ブロック (プレゼンス、メッセージ、および iq スタンザ) を定義します。これらは通常、拡張子として提供されます。現在利用可能な標準拡張機能のリストは、ここにあります。これらの中で最も重要なものは、通常、一般的なすべての XMPP サーバーで利用できます。XMPP をメッセージ指向のミドルウェアとして適切なものにしているのは、まさにこの拡張性です。
例として、ミドルウェアの典型的なパターンであるPublish-Subscribeを取り上げてみましょう。これは、単純なメッセージングで十分なエンティティがいくつかあるシナリオから離れるとすぐに必要になります。PubSub は、エンティティまたはプロデューサーが、他のエンティティであるコンシューマーによって消費される情報を生成する状況で使用されます。通常、情報は、コンシューマーがサブスクライブしているノードに書き込まれます。サブスクライブすると、アイテムが追加/更新/削除されたときに通知を受け取ります。PubSub は、長時間実行されるジョブをキューに入れ、ワーカーにそれらを処理させることから、マイクロブログに至るまで、信じられないほど多くのユースケースをエレガントにカバーできます。XMPP には、PubSub を標準的な方法で処理するための非常に堅牢で広く利用可能な拡張機能があります。XEP-0060と、公開、購読、通知、およびセキュリティを処理するためのワークフローをそのまま提供します。XEP のユースケースを見ると、全体が単純であることがわかります。
現在、ほとんどのユースケースは既存の標準拡張機能を使用 (または悪用) することでカバーされていますが、最終的には、他の場所ではカバーされていない小さな追加のカスタム プロトコルが必要になる場合があります。選択した言語を使用して、独自のプロトコルを定義するXMPP コンポーネントを作成できます。次に、コンポーネントを実行中の XMPP サーバーに接続し、単純な名前空間を使用して、処理できるメッセージの種類をサーバーに知らせ、サーバーに接続しているクライアントにプロトコル機能をアドバタイズさせます。これをどれだけ単純または複雑にできるかには際限がありません。より良い例がありませんが、説明には十分かもしれません。は私が書いたコンポーネントで、XMPP を活用して Plone CMS でリアルタイムの共同編集を行います (Google ドキュメントに似ています)。詳細は複雑になる可能性がありますが、そのページの「プロトコル仕様」を参照すると、アイデアが得られると思います。
最後に、@boday が言及しているように Java 固有のライブラリに関しては、Apache Camel 統合と同様に簡単に開始できるライブラリがあります (ただし、私が見る限り、単純なメッセージングのみを行います)。ただし、XMPP がどのように機能するかを理解し、既存のライブラリの使用を超えることができるようにするための投資は、非常に価値があり、非常に強力でありながらシンプルな統合につながる可能性があることに注意してください。