| Flex 2 開発ガイド > データアクセスと相互接続性 > データサービスの設定 > メッセージチャネルの設定 | |||
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 チャネル定義の <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 要求および応答をサポートします。 このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、通常はチャネル定義で 次の例は 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 要求および応答をサポートします。 このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、チャネル定義で 次の例は、ポーリングを有効にした 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>
</properties>
</channel-definition>
Java keytool ユーティリティを使用して、公開キーと秘密キーのペア、および自己署名証明書を作成できます。自己署名証明書のユーザー名は、 オプションで、リムーバブルメディアなどの別のファイルにキーストアのパスワードを保存することができます。指定が必要なのは、1 つの keystore-password または keystore-password-file だけです。次の例に、 <keystore-password-file>a:\password</keystore-password-file>
また、SSL 使用時のデフォルトの JVM アルゴリズムの代わりに、代替 JVM アルゴリズムを指定することもできます。デフォルトの JVM アルゴリズムは、セキュリティプロパティ ssl.KeyManagerFactory.algorithm で制御できます。通常は、デフォルトのアルゴリズムを使用し、このプロパティを省略してください。使用できる値は次のとおりです。
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>
HTTP ベースのチャネルエンドポイントを使用するときは、チャネル定義の |
|
セキュアな 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