第9章 相互運用性

本章では、AMQ JMS を他の AMQ コンポーネントと組み合わせて使用する方法を説明します。AMQ コンポーネントの互換性の概要は、製品の概要 を参照してください。

9.1. 他の AMQP クライアントとの相互運用

AMQP メッセージAMQP タイプシステム を使用して設定されます。この共通の形式を持つことは、異なる言語の AMQP クライアントが相互運用できる理由の 1 つです。本セクションでは、クライアントと他の AMQP クライアントの使用を支援するために、使用されるさまざまな JMS メッセージタイプに関連して、クライアントによって送受信された AMQP ペイロードに関する動作を文書化します。

9.1.1. メッセージの送信

このセクションでは、さまざまな JMS メッセージタイプの使用時にクライアントが送信する各種ペイロードを文書化するため、他のクライアントを使用してそれらを受信するのを支援する方法を説明します。

9.1.1.1. メッセージタイプ

JMS メッセージタイプ提出された AMQP メッセージの説明

TextMessage

TextMessage は、本文テキストの utf8 でエンコードされた 文字列 を含む amqp-value ボディーセクションを使用して送信されます。本文テキストが設定されていない場合は null になります。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは 5 の バイト 値に設定されます。

BytesMessage

BytesMessage は、BytesMessage ボディーからの raw バイトを含む data ボディーセクションを使用して送信され、properties セクションの content-type フィールドは 記号"application/octet-stream" に設定されます。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは、3 の バイト 値に設定されます。

MapMessage

MapMessage ボディーは、単一の map 値が含まれる amqp-value ボディーセクションを使用して送信されます。MapMessage ボディーの byte[] 値はマップの バイナリー エントリーとしてエンコードされます。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは、2 の バイト 値に設定されます。

StreamMessage

StreamMessage は、StreamMessage ボディーのエントリーが含まれる amqp-sequence ボディーセクションを使用して送信されます。StreamMessage ボディーの byte[] エントリーは、シーケンスの バイナリー エントリーとしてエンコードされます。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは、4 の バイト 値に設定されます。

ObjectMessage

ObjectMessage は、ObjectOutputStream を使用して ObjectMessage ボディーをシリアライズするバイトを含む data ボディーセクションを使用して送信されます。properties セクションの content-type フィールドは、シンボル の値 "application/x-java-serialized-object" に設定されます。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは、1 の バイト 値に設定されます。

メッセージ

プレーンな JMS メッセージにはボディーがなく、null を含む amqp-value ボディーセクションとして送信されます。"x-opt-jms-msg-type" の 記号 キーを持つメッセージアノテーションは、0 の バイト 値に設定されます。

9.1.1.2. メッセージのプロパティー

JMS メッセージでは、さまざまな Java タイプのアプリケーションプロパティーの設定がサポートされます。このセクションでは、これらのプロパティータイプと、送信されたメッセージの application-properties セクションの AMQP 型の値とのマッピングを説明します。JMS と AMQP はいずれもプロパティー名に文字列キーを使用します。

JMS プロパティータイプAMQP アプリケーションプロパティーのタイプ

boolean

boolean

byte

byte

short

short

int

int

long

long

float

float

double

double

String

文字列 または null

9.1.2. メッセージの受信

このセクションでは、クライアントが受信した各種ペイロードをさまざまな JMS メッセージタイプにマッピングし、他のクライアントを使用してメッセージを受信して JMS クライアントによる受信用にメッセージを送信する方法を説明します。

9.1.2.1. メッセージタイプ

受信した AMQP メッセージに "x-opt-jms-msg-type" message-annotation が存在する場合は、その値を使用して、以下の表で説明するマッピングに従って、そのメッセージタイプを表すのに使用する JMS メッセージタイプを判断します。これは、JMS クライアントによって送信される メッセージについて説明したマッピングのリバースプロセスを反映します。

AMQP "x-opt-jms-msg-type" message-annotation 値 (タイプ)JMS メッセージタイプ

0

メッセージ

1 (バイト)

ObjectMessage

2 (バイト)

MapMessage

3 (バイト)

BytesMessage

4 (バイト)

StreamMessage

5 (バイト)

TextMessage

"x-opt-jms-msg-type" message-annotation が存在しない場合、以下の表でメッセージが JMS メッセージタイプにマップされます。StreamMessage タイプおよび MapMessage タイプは、アノテーション付きメッセージのみに割り当てられることに注意してください。

"x-opt-jms-msg-type" アノテーションなしの Received AMQP メッセージの説明JMS メッセージタイプ
  • 文字列 または null を含む amqp-value ボディーセクション。
  • プロパティー セクションの content-type フィールドが "text/plain""application/xml"、または "application/json" などの一般的なテキストメディアタイプを表す 記号 の値に設定される data ボディーセクション。

TextMessage

  • バイナリー を含む amqp-value ボディーセクション。
  • プロパティー セクションの content-type フィールドが設定されていないか、記号"application/octet-stream" を設定するか、別のメッセージタイプと関連しない値に設定されている data ボディーセクション。

BytesMessage

  • プロパティー セクションの content-type フィールドが 記号"application/x-java-serialized-object" に設定された data ボディーセクション。
  • 上記の説明のない値が含まれる amqp-value ボディーセクション。
  • amqp-sequence ボディーセクション。これは ObjectMessage 内で List として表されます。

ObjectMessage

9.1.2.2. メッセージのプロパティー

このセクションでは、受信した AMQP メッセージの application-properties セクションの値と、JMS メッセージで使用される Java 型とのマッピングを説明します。

AMQP アプリケーションプロパティーのタイプJMS プロパティータイプ

boolean

boolean

byte

byte

short

short

int

int

long

long

float

float

double

double

string

String

null

String