メッセージチャネルの設定

Flex データサービスでは、Flex メッセージングシステムの一部であるメッセージチャネルを経由して、サービスの宛先との間でメッセージが相互に伝達されます。任意のタイプのサービスと任意のタイプのチャネルを、ペアにすることができます。

Flex データサービスでは AMF、HTTP、RTMP の各チャネルと、セキュアな AMF、HTTP、RTMP の各チャネルがサポートされています。データのセキュリティを必要とする場合は、いずれかのセキュアなチャネルを使用してください。セキュアな AMF チャネルとセキュアな HTTP チャネルでは、HTTPS (HTTP over Secure Socket Layer) を使用してデータが伝達されます。セキュアな RTMP チャネルでは、TLS (RTMP over Transport Layer Security) を使用してデータが伝達されます。

チャネル定義はデータサービス設定ファイルで作成します。各チャネル定義のエンドポイント URI は一意である必要があります。

AMF エンドポイントを繰り返しポーリングするように AMF ポーリングチャネルを設定することで、クライアントプルのメッセージコンシューマを作成できます。ポーリングの発生間隔はチャネル上で設定できます。

次の例は AMF チャネル定義を示しています。チャネル定義の前には、その定義を参照する宛先が付きます。

...
    <destination id="MyTopic">
...
        <channels>
            <channel ref="samples-amf"/>
        </channels>
...
    </destination>
...

    <channel-definition id="samples-amf"
        type="mx.messaging.channels.AMFChannel">
        <endpoint uri="/myapp/messagebroker/amf" port="8100"
            type="flex.messaging.endpoints.AmfEndpoint"/>
    </channel-definition>
</channels>
...

ChannelSet オブジェクトを作成して実行時にクライアントでチャネルを割り当てることもできます。ChannelSet オブジェクトには Channel オブジェクトを格納します。次の例に示すように、ChannelSet をサービスコンポーネントに割り当てます。

...
// ChannelSet を作成します。
var cs:ChannelSet = new ChannelSet();
// Channel を作成します。
var customChannel:Channel = new AMFChannel("my-polling-amf", endpointUrl);
// Channel を ChannelSet に追加します。
cs.addChannel(customChannel);
// ChannelSet を RemoteObject インスタンスに割り当てます。
myRemoteObject.channelSet = cs; 
...

チャネルを実行時に設定するときは、endpointURL を動的に制御できます。ChannelSet には Channel オブジェクトをいくつでも追加できます。ChannelSet オブジェクトではセット全体が検索され、接続可能なチャネルが見つけられます。宛先が認識する ID を指定することをお勧めしますが、ID の確認が不要な場合は null を渡すことができます。

ChannelSet で提供される検索動作に加えて、Channel クラスでは failoverURIs プロパティが定義されています。このプロパティを使用すると、ActionScript でチャネルを直接設定して、チャネルから宛先への接続を試みたときにこのエンドポイント URI の配列全体にわたってフェイルオーバーを発生させるようにすることができます。

接続プロセスでは、最初のチャネルが検索され、そのチャネルへの接続が試みられます。この接続に失敗した場合、チャネルでフェイルオーバー URI が定義されていれば、それぞれの URI が試みられ、すべて失敗した場合はそのチャネルが断念され、次に使用可能なチャネルが ChannelSet で検索されます。セット内のどのチャネルへの接続もできなかった場合、保留されている未送信のメッセージがあればクライアントで失敗が生成されます。

Flex データサービスでは次のメッセージチャネルがサポートされています。

メッセージチャネル

説明

RTMP

RTMP エンドポイントへの接続に使用するチャネル。リアルタイムのメッセージングとサーバープッシュのブロードキャストをサポートします。

次の例は RTMP チャネル定義を示しています。

<channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel"> <endpoint uri="rtmp://{server.name}:2035" class="flex.messaging.endpoints.RTMPEndpoint"/> <properties> <idle-timeout-minutes>20</idle-timeout-minutes> </properties> </channel-definition>

RTMP エンドポイントの設定では server.port トークンまたは context.root トークンは使用できません。server.name トークンは使用できますが、クラスタ化の使用時は使用できません。

ファイアウォールを設置している場合は、RTMP トラフィックを許可するために、RTMP エンドポイントに割り当てたポートを開く必要があります。HTTP トンネリングは RTMP トラフィックには使用できません。

SSL (Secure Socket Layer) を使用する安全なデータ送信を提供する場合は、標準の RTMP チャネルではなくセキュアな RTMP チャネルを使用してください。

RTMP チャネル定義の properties セクションにあるオプションの max-worker-threads エレメントを使用すると、固定 RTMP エンドポイントワーカープールサイズを設定できます。デフォルトの動作は、必要に応じて上限なしで大きくなるキャッシュスレッドプールを使用するためのものです。次の例は、max-worker-threads エレメントを示しています。

<channel-definition id="rtmp-ac" class="mx.messaging.channels.RTMPChannel"> <endpoint uri="rtmp://10.132.64.63:2266/eqa/rtmpac" class="flex.messaging.endpoints.RTMPEndpoint"/> <properties> <max-worker-threads>10</max-worker-threads> ...

AMF

AMF エンコードされたメッセージを AMF エンドポイントに送信するために使用するチャネル。HTTP 経由で送信された AMF 要求および応答をサポートします。

このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、通常はチャネル定義で polling プロパティを true に設定します。また、ポーリング間隔をチャネル定義で設定することもできます。

次の例は AMF チャネル定義を示しています。

<channel-definition id="samples-amf" type="mx.messaging.channels.AMFChannel"> <endpoint uri="http://{server.name}:8100/myapp/messagebroker/ amf" type="flex.messaging.endpoints.AmfEndpoint"/> </channel-definition>

AMF ポーリング

AMF エンコードされたメッセージを AMF エンドポイントに送信するために使用するチャネル。HTTP 経由で送信された AMF 要求および応答をサポートします。

このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、チャネル定義で polling プロパティを true に設定します。また、ポーリング間隔をチャネル定義で設定することもできます。

次の例は、ポーリングを有効にした AMF ポーリングチャネル定義を示しています。

<channel-definition id="samples-polling-amf" type="mx.messaging.channels.AMFChannel"> <endpoint uri="http://{server.name}:8100/dev/messagebroker/ amfpolling" type="flex.messaging.endpoints.AmfEndpoint"/> <properties> <polling-enabled>true</polling-enabled> <polling-interval-seconds>8</polling-interval-seconds> </properties> </channel-definition>

セキュアな RTMP

TLS (Transport Layer Security) 経由の RTMP エンドポイントへの接続に使用するチャネル。このチャネルは、リアルタイムのメッセージングとサーバープッシュのブロードキャストをサポートします。このチャネルではデジタル証明書が必要です。また、キーストアファイル名とパスワードを指定するための子エレメントが含まれます。次の例はセキュアな RTMP チャネル定義を示しています。キーストアファイルは必ずしも示された場所に存在するとは限りません。.

<channel-definition id="my-rtmps" class="mx.messaging.channels.SecureRTMPChannel"> <endpoint uri="rtmps://{server.name}:2099" class="flex.messaging.endpoints.SecureRTMPEndpoint"/> <properties> <idle-timeout-minutes>30</idle-timeout-minutes> <keystore-file>C:¥somedir¥flex¥dataservices¥apps/j2ee¥dev¥WEB- INF/flex/keys/server.keystore</keystore-file> <keystore-password>password</keystore-password> </properties> </channel-definition>

Java keytool ユーティリティを使用して、公開キーと秘密キーのペア、および自己署名証明書を作成できます。自己署名証明書のユーザー名は、localhost、または RTMPS エンドポイントが使用できる IP アドレスに、設定する必要があります。キーおよび証明書の作成と管理の詳細については、Java keytool のマニュアル (http://java.sun.com) を参照してください。

オプションで、リムーバブルメディアなどの別のファイルにキーストアのパスワードを保存することができます。指定が必要なのは、1 つの keystore-password または keystore-password-file だけです。次の例に、 keystore-password-file エレメントを示します。

<keystore-password-file>a:\password</keystore-password-file>

また、SSL 使用時のデフォルトの JVM アルゴリズムの代わりに、代替 JVM アルゴリズムを指定することもできます。デフォルトの JVM アルゴリズムは、セキュリティプロパティ ssl.KeyManagerFactory.algorithm で制御できます。通常は、デフォルトのアルゴリズムを使用し、このプロパティを省略してください。使用できる値は次のとおりです。

  • <algorithm>Default</algorithm> デフォルトの JVM アルゴリズムを明示的に使用します。
  • <algorithm>SunX509</algorithm> Sun のアルゴリズムを使用します。Sun セキュリティプロバイダが必要です。
  • <algorithm>IbmX509</algorithm> IBM のアルゴリズムを使用します。IBM セキュリティプロバイダが必要です。

RTMP エンドポイントの設定では server.port トークンまたは context.root トークンは使用できません。server.name トークンは使用できますが、クラスタ化の使用時は使用できません。

ファイアウォールを設置している場合は、RTMP トラフィックを許可するために、RTMP エンドポイントに割り当てたポートを開く必要があります。HTTP トンネリングは RTMP トラフィックには使用できません。

セキュアな AMF

AMF チャネルと同様のチャネルですが、HTTP ではなく HTTPS を使用します。AMF チャネルとは別のエンドポイントとクラスを使用します。

次の例はセキュアな AMF チャネル定義を示しています。

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint uri="https://{server.name}:9100/dev/messagebroker/ amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> </channel-definition>

HTTP

HTTP エンドポイントへの接続に使用するチャネル。HTTP 要求および応答をサポートします。このチャネルはテキストベースの (XML) メッセージ形式を使用します。

次の例は HTTP チャネル定義を示しています。

<channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel"> <endpoint uri="http://{server.name}:8100/dev/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/> </channel-definition>

メモ : 正確な、参照による直列化が必要な場合は、HTTPChannel による IExternalizable インターフェイス (カスタム直列化で使用します) を実装する型は使用しないでください。使用した場合、循環オブジェクト間の参照が失われ、エンドポイントで参照のクローンが作成されたような状態になります。IExternalizable インターフェイスの詳細については、カスタム直列化の使用を参照してください。

HTTP ベースのチャネルエンドポイントを使用するときは、チャネル定義の properties セクションにある redirectURL プロパティで URL を指定することができます。これは従来の機能です。要求の MIME タイプが正しくなかった場合に、これを使用して要求を別の URL にリダイレクトできます。

セキュアな HTTP

HTTP チャネルと同様のチャネルですが、HTTP ではなく HTTPS を使用します。HTTP チャネルとは別のチャネルクラスを使用します。

次の例はセキュアな HTTP チャネル定義を示しています。

<channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel"> <endpoint uri= "https://{server.name}:9100/dev/messagebroker/ httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/> </channel-definition>

Flex 2.01