JMS 宛先の管理

このトピックでは、ゲートウェイが JMS 宛先と連携する方法について説明します。
gateway91
このトピックでは、
Layer7 API Gateway
が JMS 宛先と連携する方法について説明します。
JMS 宛先として Websphere を設定する場合は、代わりに「WebSphereJMS プロバイダへの接続」を参照してください。
JMS 宛先の理解
Layer7 API Gateway
では、JMS 宛先は
キュー
または
トピック
のいずれかです。
Layer7 API Gateway
が JMS (Java Message Service)を使用してサービス リクエスタと公開されたサービスと通信できるようにするには、1 つ以上の JMS 宛先を Policy Manager で設定する必要があります。JMS 宛先はリクエスタからメッセージを受信する(インバウンド)または Web サービスまたは XML アプリケーションにメッセージを送信する(アウトバウンド)ために使用できます。  
Layer7 API Gateway
は、Policy Manager で設定されたすべての受信宛先を自動的に監視します。
Layer7 API Gateway
は受信宛先からメッセージを受信すると、メッセージが目的とするサービスを特定し、適用可能なポリシーを実行します。
ポリシーには、それぞれ HTTP(S) または JMS を使用してメッセージ転送を指定する Route via HTTP(S) アサーションまたは Route via JMS アサーションを含めることができます。
Layer7 API Gateway
には、3 つの可能な HTTP(S) および JMS ルーティング シナリオがあります。
JMS - JMS 設定
JMS - JMS 設定シナリオでは、
Layer7 API Gateway
は監視対象の受信 JMS 宛先(iJMS)からメッセージを受信し、Route via JMS アサーションを使用して送信 JMS 宛先(oJMS)にメッセージを転送します。
リクエスタ < iJMS > Gateway < oJMS > サービス
iJMS および oJMS 宛先の両方はさまざまな応答動作に対して設定できます。これにより、
Layer7 API Gateway
の応答方法が決まります。詳細については、[JMS destination Properties]ダイアログ ボックスの[In
bound Options
]タブおよび[
Outbound Options
]タブを参照してください。
JMS - HTTP 設定
JMS - HTTP 設定シナリオでは、
Layer7 API Gateway
は監視対象の受信 JMS 宛先(iJMS)からメッセージを受信し、HTTP を使用してサービスにメッセージを転送します。
リクエスタ < iJMS > Gateway < HTTP > サービス
同様に、
Layer7 API Gateway
は、Policy Manager で設定された受信 JMS 宛先(iJMS)を監視します。
Layer7 API Gateway
は宛先からメッセージを受け取ったときに、サービスのポリシーの Route via HTTP(S) アサーションで指定されたサービス URL にメッセージをルーティングします。
Layer7 API Gateway
は、受信 JMS 宛先設定に基づいて、受信メッセージに応答します(詳細については、「JMS 宛先のプロパティ」の[
Inbound Options
]タブを参照)。
サービスを公開すると、Policy Manager はポリシーで Route via HTTP(S) アサーションとして公開プロセス中に指定されたサービス URL を自動的に追加します。
HTTP - JMS 設定
HTTP - JMS 設定シナリオでは、
Layer7 API Gateway
は HTTP 経由でメッセージを受信し、送信 JMS 宛先(oJMS)にメッセージを転送します。
リクエスタ < HTTP > Gateway < oJMS > サービス
Layer7 API Gateway
は、HTTP または HTTP(S) 経由でメッセージを受信するため、ポリシーでは Require HTTP Basic Credentials アサーションと Require SSL or TLS Transport with Client Authentication アサーションを使用できます。
Layer7 API Gateway
は送信 JMS 宛先設定に基づいて oJMS 応答に応答します(詳細については、「JMS 宛先のプロパティ」の[
Outbound Options
]タブを参照)。その後、
Layer7 API Gateway
はリクエストしている HTTP または HTTP(S)リクエスタに応答メッセージをルーティングします。ただし、「応答なし」オプションが設定されている場合を除きます。
 
JMS リクエストによって作成されるコンテキスト変数
Manage JMS Destination タスクが実行されると、コンテキスト変数にヘッダ情報が入力されます。
変数
説明
${request.jms.header.
<name>
}
JMS ヘッダの値を返します。<name> はヘッダ名です。
${request.jms.header.
<name>
.modified}
Manage Transport Properties/Headers アサーションによってポリシーで変更された JMS ヘッダを取得します。例:
${request.jms.header.JMSType.modified}
${request.jms.headernames}
これは、存在するすべてのヘッダの名前を返す複数値のコンテキスト変数です。
${request.jms.headernames.modified}
Manage Transport Properties/Headers アサーションによってポリシーで変更された JMS ヘッダ名をすべて取得します。例:
${request.jms.headernames.modified}
${request.jms.allheadervalues}
これは、
headername:headervalue
形式で、存在するヘッダ名および値をすべて返す複数値のコンテキスト変数です。
可能なヘッダを以下に示します。
JMSDestination
JMSDeliveryMode
JMSExpiration
JMSPriority
JMSMessageID
JMSTimestamp
JMSCorrelationID
JMSReplyTo
JMSType
JMSRedelivered
${request.jms.allheadervalues.modified}
Manage Transport Properties/Headers アサーションによってポリシーに設定された JMS ヘッダ名と値のペアをすべて取得します。例:
${request.jms.allheadervalues.modified}
JMS レスポンスによって作成されるコンテキスト変数のリストについては、「Route via JMS アサーション」を参照してください。
JMS 宛先のリクエストの解決
JMS 宛先経由で受信したリクエストは、(解決プロセスを省略して)特定の公開されたサービスに送信できます。または、リクエストに標準的な解決ルールを適用することができます。必要に応じて、特定の JMS メッセージ プロパティから取得した SOAPAction 値を使用して、サービス解決を拡張できます。
SOAPAction メッセージ プロパティが受信宛先で設定されている場合、SOAPAction 値とペイロード ネームスペース URI の組み合わせは JMS 経由でリクエストを受信すると予想されるすべてのサービスに対して個別である必要があります。SOAPAction メッセージ属性が設定されていない場合、JMS 経由でリクエストを受信すると予想されるすべてのサービスには、
Layer7 API Gateway
のその他のすべてのサービスによって共有されていないペイロード ネームスペース URI が必要です。
JMS メッセージ サイズの理解
JMS メッセージの最大サイズは、以下の 2 つのグローバル クラスタ プロパティによって制御されます。
  • io.xmlPartMaxBytes
    : これは、JMS メッセージを含めて、任意の XML メッセージの最大サイズを制御します。デフォルトでは、これは 2621440 バイト(2.5 MB)です。
  • io.jmsMessageMaxBytes
    : これは、XML およびすべての MIME 部分を含めて、JMS メッセージの最大サイズを制御します。デフォルトでは、これは io.xmlPartMaxBytes (2.5 MB)と同じです。
通常、これらの 2 つのプロパティは同じ制限があります。さらに JMS メッセージのサイズをグローバルに制限する必要がある場合は、
io.xmlPartMaxBytes
より低い値に
io.jmsMessageMaxBytes
を設定します。
JMS 宛先の使用
受信宛先により、
Layer7 API Gateway
は JMS 宛先からメッセージを受信できます。一方で、送信宛先により、
Layer7 API Gateway
は JMS 宛先でリスンしているサービスにメッセージをルーティングできます。宛先を Policy Manager で設定できるようにするには、宛先を JMS システムの管理アプリケーションで作成する必要があります。JMS 宛先はいつでも編集または削除できます。また、
Layer7 API Gateway
は、数秒以内にそれらの変更を有効にします。
新しい宛先の設定は、JMS 設定プロセス中に指定された JNDI ディレクトリ設定を必要とします。必要な値については、管理者にお問い合わせください。
送信 JMS 接続の管理
Layer7 API Gateway
は、以下のいずれかの条件下で送信 JMS 接続を閉じます。
  • 接続のアイドル時間が長すぎる(
    io.jmsConnectionCacheMaxIdleTime
    クラスタ プロパティによって制御)
  • 接続が古すぎる(
    io.jmsConnectionCacheMaxAge
    クラスタ プロパティによって制御)
  • 開いている接続の数が多すぎる(
    io.jmsConnectionCacheMaxSize
    クラスタ プロパティによって制御)
多くの送信宛先が使用中の場合、アイドル時間を減らしてキャッシュ サイズを増加させることにより、パフォーマンスを向上させることができます。
テンプレート送信宛先
テンプレート送信宛先は、宛先の作成時に特定のプロパティ(このプロパティは、後でポリシー作成時に入力されます)を省略することができる特殊なタイプの宛先です。
  • 初期コンテキスト ファクトリ クラス名([JNDI]タブ)
  • JNDI URL([JNDI]タブ)
  • JNDI ユーザ名、パスワード([JNDI]タブ)
  • 接続ファクトリ名([Destination]タブ)
  • 宛先名([Destination]タブ)
  • 宛先ユーザ名、パスワード([Destination]タブ)
  • 応答先キュー名([Outbound Options]タブ)
宛先の定義時にこれらのプロパティのいずれかを省略すると、ポリシー作成者がポリシーの設計時に Route via JMS アサーションで値を入力できます。ただし、上記のプロパティのどれかがテンプレート宛先で設定されている場合、テンプレートを Route via JMS アサーションで使用するときにそれらを変更することはできません。
TIBCO EMS との接続の問題のトラブルシューティング
TIBCO EMS サーバがシャット ダウンして再起動した後に JMS 宛先と再接続しない場合は、以下の手順に従います。
  1. EMS サーバで
    tibemsd.conf
    ファイルを見つけ、編集するためにそれを開きます。
    同じ名前の 2 つの tibemsd.conf ファイルがあります。1 つはサンプル ファイルで、機能するファイルは TIBCO ホーム フォルダに存在しています。このフォルダは、各インストールで異なる可能性があります。たとえば、「tibemsd.conf」を検索すると、以下のような結果が表示される可能性があります。
    /opt/tibco/ems/6.1/samples/config/tibemsd.conf
    /root/TIBCO_HOME/tibco/cfgmgmt/ems/data/tibemsd.conf
  2. 以下のパラメータを追加します。
    server_heartbeat_client = 5 client_timeout_server_connection = 25
    単位は秒です。したがって、上記のパラメータは 5 秒および 25 秒です。
    client_timeout_server_connection
    server_heartbeat_client
    の値の少なくとも 5 倍であることを確認してください。
これにより、再接続の問題が解決されるはずです。これらのパラメータの詳細については、「TIBCO Enterprise Messaging Service User Guide」を参照してください。
JMS 宛先の管理タスクの実行
JMS 宛先を管理する方法
  1. Policy Manager で、メイン メニュー(ブラウザ クライアントでは、[Manage]メニュー)から
    [Tasks]-[Transports]-[Manage JMS Destinations]
    を選択します。[Manage JMS Destinations]ダイアログ ボックスが表示されます。
    以下のいずれかのアクションを選択します。
    アクション
    説明
    宛先リストのフィルタ(オプション)
    多くの JMS 宛先がある場合、目的の宛先をより容易に見つけるためにリストをフィルタできます。
    1. ドロップダウン リストから、フィルタに使用する宛先プロパティを選択します。
      • Name ([
        Basic
        ]タブから)
      • JNDI URL ([
        JNDI
        ]タブから)
      • Destination Name ([
        Destination
        ]タブから)
        これらはすべて 「JMS 宛先のプロパティ」にあります。
    2. 検索する数文字を入力します。このテキストは、選択した宛先プロパティ内の任意の場所に一致し、大文字と小文字は区別されません。
      フィルタを強化するために、正規表現を使用できます。
    3. 受信宛先([Inbound])のみ、送信宛先([Outbound])のみ、または両方の宛先([Both])を含むかどうかを指定します。
    4. Filter
      ]をクリックします。リストがフィルタ条件に一致する宛先のみを表示するためにフィルタされます。
    列に基づいた宛先リストの並べ替え
    デフォルトでは、宛先リストは[Name]によって昇順で並べられています。
    新しい JMS 宛先の追加
    Add
    ]をクリックして、新しい宛先のプロパティを設定します。「JMS 宛先のプロパティ」を参照してください。
    また、[JMS Routing Properties]ダイアログ ボックスの[
    New Destination
    ]をクリックして、新しい JMS 宛先を作成することもできます。
    各送信宛先が別の Web サービスに解決される限り、同じ送信宛先を複数回定義できます。
    既存の JMS 宛先のクローンの作成
    クローンを作成する宛先を選択して、[
    Clone
    ]をクリックします。必要に応じて宛先プロパティを編集します。「JMS 宛先のプロパティ」を参照してください。
    既存の JMS 宛先の変更
    変更する宛先を選択して、[
    Properties
    ]をクリックします。必要に応じて宛先プロパティを編集します。「JMS 宛先のプロパティ」を参照してください。  
    接続が有効であることを確認するために、必ず新しい設定をテストしてください。
    JMS 宛先の削除
    削除する宛先を選択して、[
    Remove
    ]をクリックします。[
    OK
    ]をクリックして削除を確定します。
    宛先を削除しても、
    Layer7 API Gateway
    から登録解除されるだけです。宛先は、まだ JMS システムの管理アプリケーションに存在します。
  2. と JMS 宛先の間の接続をテストするために
    [Test Settings]
    Layer7 API Gateway
    をクリックします。
    Layer7 API Gateway
    が以下を実行できる場合、テストは成功と見なされます。
    • 受信宛先からの読み取り
    • 送信宛先への書き込み
    • 設定で指定されたその他のすべての宛先との通信(応答先キュー、失敗キュー、応答待機キューなど)
      接続を確立できない場合は、表示された診断情報を書き留め、宛先と
      Layer7 API Gateway
      の設定を再確認し、再度試行します。 
  3. Save
    ]をクリックして、[JMS Destination Properties]を閉じます。宛先を追加する場合、新しい宛先は
    Layer7 API Gateway
    で登録され、[Manage JMS Destinations]ダイアログ ボックスの[Known JMS Destinations]テーブルに追加されます。
    いずれかのタブで情報が欠けている場合、[
    Save
    ]ボタンは使用できません。
  4. 完了したら[
    Close
    ]をクリックします。