Comments
Description
Transcript
4章 MQクライアントの機能拡張 目次
<WebSphere MQ V7 Update Workshop> WebSphere MQ 4章 MQクライアントの機能拡張 2008/07 日本アイ・ビー・エム システムズ・エンジニアリング㈱ <WebSphere MQ V7 Update Workshop> 目次 非同期メッセージ送信 メッセージ先読み TCP/IP ソケットの共用(共用会話) 双方向ハートビート チャネル数の制御 チャネルの重み付け HTTP ブリッジ その他 MQ Explorerの機能拡張 <付録>属性及びパラメータの追加/変更 この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレビューを受け ておらず、当資料に記載された内容に関して当ワークショップの主催者である日本アイ・ビー・エム システムズ・エンジニアリング株式会社は何ら保証 するものではありません。 従って、この情報の利用またはこれらの技法の実施はひとえに使用者の責任において為されるものであり、資料の内容によって受けたいかなる被害 に関しても一切の保証をするものではありません。 当資料に記載された製品名または会社名はそれぞれの各社の商標または登録商標です。 2 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信 3 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信 キュー・マネージャーからの応答を待つことなく、非同期にメッセージをキューに書き込む機能 MQPUTの応答時間が短縮 Îキューにメッセージが書き込まれた事をそのつど確認する必要のないアプリケーションの パフォーマンスが向上 V6 MQクライアント・アプリ MQクライアント・ ライブラリ キュー・マネージャー MQPUT MQPUT MQCC_OK MQCC_OK MQクライアント・ ライブラリ サーバー接続チャネル MQPUT MQCC_OK MQPUT MQCC_OK メッセージがQmgr側で書き込まれてから MQPUTの実行結果を応答として受信(同期処理) MQPUT MQCC_OK MQクライアント・アプリ アプリケーションは、MQPUTを実行 MQCC_OK MQPUT V7 サーバー接続チャネル キュー・マネージャー MQPUT 応答コードMQCC_OKは、メッセージがキュー・マネージャ に書き込まれる前に返される (非同期処理) MQCC_OK MQPUT MQCC_OK PUT状況 確認 非同期メッセージ送信の処理状況を取得 (MQSTATコール) ※デフォルトではv6の動作 非同期メッセージ送信を有効にするには 明示的な設定が必要 4 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信の設定 キューのDEFPRESP属性で設定 ALTER QLOCAL() DEFPRESP( SYNC | ASYNC ) SYNC:V6と同様の動作(デフォルト) ASYNC:非同期メッセージ送信 アプリケーションの指定(MQI、BaseJava) 以下のキューに設定が可能 • ローカル・キュー • モデル・キュー • エイリアス・キュー • リモート・キュー • クラスター・キュー MQPMO(MQ Put Message Option)で設定 デフォルトではMQPMO_RESPONSE_AS_Q_DEF Îアプリケーションを変更することなく、キュー属性を変えることで設定が可能 MQPMO_SYNC_RESPONSE MQPMO_ASYNC_RESPONSE MQPMO_RESPONSE_AS_Q_DEF キューのDEFPRESP属性に従う 優先順位:MQPMOの設定 > キューのDEFPRESP属性の設定 JMSでの設定 宛先オブジェクトにPUTASYCALLOWED(YES)を設定、かつ、キュー属性DEFPRESP (ASYNC)を設定 5 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信の動作 MQMDは以下の項目のみがクライアント・ライブラリ側で設定される ApplIdentityData PutApplType PutApplName ApplOriginData MsgId 各クライアントで重複しないように番号が振られる CorrelId 残りのフィールドは未定義のままMQMDが返される MQPUT1も非同期に処理が可能 ローカル接続でも非同期メッセージ送信が可能 6 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信の制限事項 ノン・パーシステントメッセージと同期点付きのパーシステントメッセージのみ、 非同期的にメッセージが送信される 同期点なしのパーシステント・メッセージを送信する場合、メッセージは同期的に送信される MQPUT(SYNCPOINT) MQPUT(NO_SYNCPOINT) パーシステント 非同期PUT可 同期(非同期PUT不可) ノン・パーシステント 非同期PUT可 非同期PUT可 MQPUT(SYNCPOINT)、MQPUT(NO_SYNCPOINT)を混ぜて発行することが可能 LOGICAL_ORDERを用いてのグループ・メッセージの非同期メッセージ送信は不可 自動的に同期通信に切り替わる MQクライアント側でGroupID、MsgSeqNumberを設定すれば非同期送信が可能 7 <WebSphere MQ V7 Update Workshop> 応答コードの取得 非同期MQPUTには、即座に応答コードMQCC_OKが返る メッセージがキューに正常に書き込まれたかどうかは判別できない キューにメッセージが書き込まれたかを確認するには、MQSTATコールを用いてキュー・マネー ジャーから応答コードを取得することが必要 MQクライアント・ ライブラリ MQクライアント・アプリ MQPUT キュー・マネージャーに処理状況を 問い合わせる MQSTAT ・・・ 実際にMQPUTが成功したかどうかは 分からない サーバー接続チャネル キュー・マネージャー MQCC_OK MQPUT MQCC_OK キュー・マネージャーとの接続が切れた場合はMQPUTの応答コードに MQRC_CONNECTION_BROKENが返る MQSTATコール(New MQI) 非同期送信したメッセージの処理結果をキュー・マネージャーから取得 MQSTAT(Hconn, Type, Stat, CompCode, Reason) MQSTS構造体に処理結果が格納される 8 <WebSphere MQ V7 Update Workshop> MQSTATコールの動作 MQSTATコールにより、キュー・マネージャーは非同期メッセージ送信の処理結果をMQSTS構造 体に格納してアプリケーションに返す MQSTS構造体には、最後にMQCONN、MQSTATが呼び出された後の、非同期送信の結果 が格納される MQCMITが呼び出された場合でもリセットされない MQSTS構造体の応答コード 非同期メッセージ送信が正常終了した場合 MQCC_OK、MQRC_NONEが返される 非同期メッセージ送信に失敗した場合 一番最初に起こったエラーの完了コード、理由コードがMQSTS構造体に格納される MQクライアント・アプリ MQクライアント・ ライブラリ サーバー接続チャネル キュー・マネージャー MQPUT 成功:2回 MQCC_OK MQCC_OK MQPUT 失敗:2回 キュー・フル MQCC_OK 完了コード MQCC_ FAILED 一番最初に起こったエラーの 完了コード、理由コードが MQSTS構造体に格納される MQCC_FAILED MQPUT MQCC_OK MQCC_OK MQPUT 理由コード 2053 (キュー・フル) PUT禁止 MQCC_OK MQCC_FAILED MQSTAT 9 <WebSphere MQ V7 Update Workshop> MQSTATコールの動作 複数のMQクライアント・アプリケーションが1つのキューに接続している場合 MQSTS構造体には、各MQクライアントに対応する処理状況が格納される MQクライアント・アプリ 成功:1回 MQクライアント・ ライブラリ サーバー 接続チャネル MQPUT MQCC_OK キュー・マネージャー MQSTAT 成功:1回 MQPUT MQCC_OK MQSTAT 成功:1回 MQPUT MQCC_OK MQSTAT MQクライアントから複数のキューに接続している場合 送信されたメッセージの処理状況が、まとめてMQSTS構造体に格納される エラーが起こった場合は、最初に起こったエラーの宛先キュー名、完了コード、理由コードが格納される MQPUT MQCC_OK 成功:2回 MQPUT MQCC_OK MQSTAT 10 <WebSphere MQ V7 Update Workshop> <参考>MQSTATコール 非同期送信したメッセージの処理状況をキュー・マネージャーから取得するために 追加されたMQI MQSTAT(Hconn, Type, Stat, CompCode, Reason) 各パラメータの説明 フィールド名 (データタイプ) 入出力 説明 (MQHCONN) Hconn 入力 ・コネクションハンドル (MQLONG) Type 入力 ・リクエストする情報のタイプを記述 MQSTAT_TYPE_ASYNC_ERROR のみ有効 入力/出力 (MQSTS) Stat ・非同期メッセージ送信の処理状況が格納される構造体 (MQLONG) CompCode 出力 ・完了コード (MQLONG) Reason 出力 ・理由コード 11 <WebSphere MQ V7 Update Workshop> <参考>MQSTS構造体 型 要素名 入出 力 説明 MQCHAR4 StrudtId 入力 構造体ID MQLONG Version 入力 バージョン MQSTS_VERSION_1 MQLONG CompCode 出力 完了コード MQLONG Reason 出力 理由コード MQLONG PutSuccessCount 出力 非同期メッセージ送信がMQCC_OK完了コードで終了した 回数 MQLONG PutWarningCount 出力 非同期メッセージ送信がMQCC_WARNING 完了コードで 終了した回数 MQLONG PutFailureCount 出力 非同期メッセージ送信がMQCC_FAILED 完了コードで終 了した回数 MQCHAR48 ObjectType 出力 ObjectNameで指定したオブジェクトの種類 MQCHAR48 ObjectName 出力 PUT操作で指定されたメッセージの送信先のオブジェクト名 MQCHAR48 ObjectQMgrName 出力 PUT操作で指定されたメッセージの送信先のキュー・マネー ジャー名 MQCHAR48 ResolvedObjectName 出力 ローカル・キュー・マネージャーが名前解決したObjectName MQCHAR48 ResolvedQmgrName 出力 ローカル・キュー・マネージャーが名前解決した送信先キュー・ マネージャー名 12 <WebSphere MQ V7 Update Workshop> 非同期送信アプリケーション設計時の考慮点 パフォーマンス 非同期に動作するMQIはMQPUTのみ MQPUT以外の処理が頻繁に実行されると、パフォーマンス向上の妨げになる 可能性がある 同期点処理を行っている場合のMQSTATコール MQCMITが成功すれば、それまでのMQPUT(SYNCPOINT)はすべて成功 MQPUTが途中で失敗している場合、MQCMITはエラー・コードMQRC_BACKED_OUTを返す ÎMQSTATで全てのMQPUTが成功しているのを確認してから、MQCMITをする必要はない MQCMITはエラーが発生したことは検知できるが、エラーの理由はわからない Îエラーの内容は、MQSTATコールで確認 13 <WebSphere MQ V7 Update Workshop> 非同期送信アプリケーション設計時の考慮点 MQPUTの応答コードはチャネルが異常終了した場合を除きMQCC_OKが返る 宛先キューに障害が発生していても、アプリケーションはPUTし続ける Îチャネルの異常終了以外のエラーを検知するためには、適当なタイミングでMQSTATコール を呼び出し、処理結果を確認 MQクライアント・アプリ MQクライアント・ ライブラリ キューへの書き込み エラー サーバー接続チャネル キュー・マネージャー MQPUT クライアント側は 書き込みエラーを 検知しない MQCC_OK MQCC_OK MQPUT MQCC_OK MQCC_FAILED MQPUT MQCC_OK ・・・ ・・・ MQSTATで非同期PUTの 処理結果を確認 MQSTAT 14 MQCC_FAILED キュー・フル <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信 アプリケーション・サンプル 非同期メッセージ送信を数回実行し、最後にMQSTATを呼び出す ※v7付属のサンプル・アプリケーションより MQSTS構造体を宣言 MQSTS sts = {MQSTS_DEFAULT}; MQCONN(QMName, &Hcon, &CompCode, &CReason); MQOPEN(Hcon, &od, O_options, &Hobj, &OpenCode, &Reason); md.Persistence = MQPER_NOT_PERSISTENT; pmo.Options |= MQPMO_ASYNC_RESPONSE; 非同期PUTの設定 非同期PUT MQPUT(Hcon, Hobj, &md, &pmo, messlen, buffer, CompCode, &Reason); MQPUT(Hcon, Hobj, &md, &pmo, messlen, buffer, CompCode, &Reason); ・ ・ MQSTAT(Hcon, MQSTAT_TYPE_ASYNC_ERROR, &sts, &CompCode, Reason); MQSTATで非同期PUTの 処理状況を参照 printf("Succeeded putting %d messages¥n", sts.PutSuccessCount); printf("%d messages were put with a warning¥n", sts.PutWarningCount); printf("Failed to put %d messages¥n", sts.PutFailureCount); 成功、エラーの回数 を表示 if (sts.CompCode == MQCC_WARNING){ printf("The first warning that occurred had reason code %d¥n", sts.Reason); } else if (sts.CompCode == MQCC_FAILED){ printf("The first error that occurred had reason code %d¥n", sts.Reason); printf("Failing Object Type %d¥n",sts.ObjectType); printf("Failing Object Name %s¥n",sts.ObjectName); printf("Failing Object Qmgr Name %s¥n",sts.ObjectQMgrName); } MQCLOSE(Hcon, &Hobj, C_options, &CompCode, &Reason); MQDISC(&Hcon, &CompCode, &Reason); 非同期PUTがエラーで 終了していた場合、 エラーコードを表示 15 <WebSphere MQ V7 Update Workshop> 非同期メッセージ送信 サンプル実行例 非同期メッセージ送信サンプル amqsapt /usr/mqm/samp/bin <導入ディレクトリ>¥tools¥c¥Samples¥Bin¥amqsapt C:¥>amqsapt0.exe QL KIDOC Sample AMQSAPT0 start target queue is QL msg1 宛先キューを PUT(DISABLED) msg2 msg3 msg4 msg5 msg6 msg7 応答はMQCC_OKなので msg8 MQPUTを継続 msg9 msg10 Succeeded putting 5 messages 0 messages were put with a warning Failed to put 5 messages The first error that occurred had reason code 2053 Sample AMQSAPT0 end 16 <WebSphere MQ V7 Update Workshop> メッセージ先読み 17 <WebSphere MQ V7 Update Workshop> メッセージ先読み 一度のMQGETで複数のメッセージをキュー・マネージャーから先読みする機能 ノン・パーシステントメッセージがメッセージ先読みの対象 先読みするメッセージの量、頻度を調節可能 ÎMQクライアントに大量のノン・パーシステントメッセージを読み込む際のパフォーマンスが向上 V6 MQクライアント・アプリ MQクライアント・ ライブラリ サーバー接続チャネル キュー・マネージャー MQGET MQGET V7 MQクライアント・アプリ MQGETを一回呼び出すたびに、 キュー・マネージャーからメッセージを 読み込む MQGET MQGET MQクライアント・ ライブラリ サーバー接続チャネル キュー・マネージャー MQGET MQGET バッファ (メモリ) MQGET MQGETを呼び出すと、続くメッセージを 先読みする MQGET メッセージは一度メモリに格納され、 MQGETはメモリからメッセージを読み 込む 18 <WebSphere MQ V7 Update Workshop> メッセージ先読みの設定 キューのDEFREADA属性で設定 DEF DEFREADA( DISABLED ¦ ENABLED ) 以下のキューに設定が可能 • ローカル・キュー • モデル・キュー • エイリアス・キュー DISABLED:V6と同様の動作(デフォルト) ENABLED:メッセージの先読み アプリケーションの指定(MQI、BaseJava) MQOO(MQ Open Option)で設定 デフォルトではMQOO_READ_AHEAD_AS_Q_DEF Îアプリケーションを変更することなく、キュー属性を変えることで設定が可能 MQOO_NO_READ_AHEAD MQOO_READ_AHEAD MQOO_READ_AHEAD_AS_Q_DEF キューのDEFREADA属性に従う 優先順位:MQOOの設定 > キューのDEFREADA属性の設定 JMSでの設定 宛先オブジェクトにREADAHEADALLOWED(YES)を設定 19 <WebSphere MQ V7 Update Workshop> メッセージ先読みの動作設定 mqclient.iniファイルのMessageBufferスタンザで値を設定 Maximumsize (K bytes) メッセージを読み込むバッファサイズを指定。メッセージはMaximumサイズ分先読みされる 値範囲: 1 – 999999 デフォルト値:1 特殊な値: -1 システムがバッファサイズを調整 0 メッセージ先読み無効 UpdatePercentage (%) バッファに入っているメッセージが残り何%になったら再び先読みを行うかを指定 値範囲:1 -100 ・100%だと、1メッセージをGETするごとに デフォルト値: -1 1件づつバッファに読み出す 特殊な値:-1 システムが調整 ・0%だとバッファが全部空になるまで先読みしない PurgTime( seconds) バッファに入っているメッセージを何秒で削除するか 値: 0 – 999999 デフォルト値: 0 (無効) 20 ・30%だと、バッファに占めるメッセージ割合が 約3割になったら、Read aheadする <WebSphere MQ V7 Update Workshop> メッセージ先読みの動作設定 mqclient.iniの設置 MQクライアントアプリケーションは下の順番でmqclient.iniファイルを探す 1. 環境変数MQCLNTCFの指定 Java 1.4.2ではJavaのシステム・プロパティにMQCLNTCFを指定 2. アプリケーション作業ディレクトリの親ディレクトリ 3. MQデータディレクトリ UNIX: /var/mqm Windows: 環境変数MQ_FILE_PATHで指定されたフォルダ Java 1.4.2ではJavaのシステム・プロパティにMQ_FILE_PATHを指定 4. ホームディレクトリ UNIX: 環境変数HOMEで指定されたディレクトリ Windows: 環境変数HOMEDRIVE, HOMEPATHで指定されたフォルダ Javaのシステム・プロパティuser.home以下 21 <WebSphere MQ V7 Update Workshop> メッセージ先読みの制限事項 ノン・パーシステントメッセージのみメッセージ先読みが可能 パーシステント・メッセージの場合、メッセージ先読み機能は自動的にOFFになる 同期点つきのMQGETは不可 メッセージ先読み開始前、MQGMO_SYNCPOINTを指定した場合 メッセージ先読み機能は自動的にOFFになる メッセージ先読み開始後、MQGMO_SYNCPOINTを指定した場合 MQRC_OPTIONS_ERRORが返る MQGET(SYNCPOINT) MQGET(NO_SYNCPOINT) パーシステント 不可 不可 ノン・パーシステント 不可 可 MQクライアントで接続のみメッセージ先読みが可能 ローカル接続の場合、メッセージ先読み機能は自動的にOFFになる 22 <WebSphere MQ V7 Update Workshop> メッセージ先読み機能の動作 ブラウズオプションの指定による動作の違い MQGMO_BROWSE_*オプションを指定しない場合 先読みされたメッセージはキューから除去される MQGMO_BROWSE_*オプションを指定した場合 通常のブラウズ処理と同様、メッセージはキューから除去されない 同一キューのメッセージを複数のMQクライアントで先読みした場合 メッセージは、他のアプリケーションの接続状況にかかわらず、先読みされる MQクライアント・ ライブラリ MQクライアント・アプリ サーバー 接続チャネル MQGET キュー・マネージャー MQクライアント・アプリ MQGET 23 <WebSphere MQ V7 Update Workshop> メッセージ先読み機能の動作 アプリケーションが終了するとバッファの中のメッセージは破棄される メッセージを先読みしてからGETの条件を変更すると、バッファに消費されないメッセー ジが残ることがある MsgIdを指定して読み込む場合など Î 読み込まれなかったメッセージをmqclient.iniのPurgeTimeを指定し、削除する必要がある パーシステント・メッセージとノンパーシステントメッセージが混ざっていた場合 次の先読み対象メッセージがパーシステントだったら、キューのパーシステント・メッセージが GETされるまでメッセージ先読みは行われない パーシステント・メッセージはv6までと同様にGETされる MQクライアント・アプリ MQGET ノンパーシステント ・・・ ノンパーシステント パーシステント・メッセージがGETされるまで 次のメッセージは先読みされない ノンパーシステント MQGET パーシステント ノンパーシステント ・・・ ノンパーシステント ノンパーシステント パーシステント 24 パーシステントメッセージは先読みせず GETされる 再び先読みが始まる <WebSphere MQ V7 Update Workshop> メッセージ先読み機能が働いているかどうかの確認 DISPLAY CONNコマンドで確認可能 READAステータス: YES/NO/INHIBITED/BACKLOG YES:メッセージ先読み機能が有効 NO:メッセージ先読み機能が無効 INHIBITED:メッセージ先読み機能が無効(MQGETで指定不可能なオプションを指定した場合) BACKLOG:メッセージ先読み機能が有効(バッファに消費されないメッセージが滞留している状態) 実行例: DIS CONN(E836EB4720003E67) type(HANDLE) READA AMQ8276: 接続の詳細を表示します。 CONN(E836EB4720003E67) EXTCONN(414D51434B49444F4320202020202020) TYPE(CONN) OBJNAME(QL) OBJTYPE(QUEUE) READA(YES) 25 <WebSphere MQ V7 Update Workshop> MQGMOオプションの制限 制限なし MQGMO_NO_WAIT MQGMO_FAIL_IF_QUIESCING MQGMO_BROWSE_FIRST MQGMO_BROWSE_NEXT MQGMO_BROWSE_MESSAGE_UNDER_CURSOR メッセージ先読み機能が開始されてから変更するとMQRC_OPTIONS_CHANGEDエラー MQGMO_SYNCPOINT_IF _PERSISTENT MQGMO_NO_SYNCPOINT MQGMO_ACCEPT_TRUNCATED _MSG MQGMO_CONVERT メッセージ先読み機能が開始されてから指定するとMQRC_OPTIONS_ERRORエラー (メッセージ先読み機能が未開始の時指定すると、自動的にメッセージ先読み機能はOFFになる) MQGMO_SET_SIGNAL MQGMO_SYCPOINT MQGMO_MARK_SKIP_BACKOUT MQGMO_MSG_UNDER_CURSOR MQGMO_LOCK MQGMO_UNLOCK MQGMO_LOGICAL_ORDER MQGMO_COMPLETE_MSG MQGMO_ALL_MSGS_AVAILABLE 26 <WebSphere MQ V7 Update Workshop> MQCOオプションによる動作の違い MQCLOSEコールでMQCO_IMMEDIATE、MQCO_QUIESCEオプションを 指定可能 MQCO_IMMEDIATEを指定した場合 バッファの中身を破棄し終了する デフォルト MQCO_QUIESCEを指定した場合 メッセージがバッファに残っていたら、MQRC_READ_AHEAD_MSGSエラーがMQCLOSEに返る ÎMQCLOSEする前にMQGETするなどし、バッファを空にする必要がある 27 <WebSphere MQ V7 Update Workshop> ブランク・ページ 28 <WebSphere MQ V7 Update Workshop> TCP/IPソケットの共用 (共用会話) 29 <WebSphere MQ V7 Update Workshop> TCP/IPソケットの共用 同一キュー・マネージャーへの複数コネクションでTCP/IPソケットを共有 MQクライアント側では各スレッドからのソケット処理を集約し、消費リソースを節約 キュー・マネージャー側においてもSVRCONNのMCAの消費リソースを大幅に節約 マルチ・スレッド・アプリケーションのみ有効 SVRCONN/CLNTCONNチャネルのSHARECNV属性 デフォルトでTCP/IPソケットの共用を行う 複数チャネル・インスタンス(デフォルトは10)がTCP/IPソケットを共有 従来の動作を維持したい場合、SHARECNV属性の変更(0か1を指定)が必要 SHARECNV属性はソケットの共用以外にもV7の新機能の動作を制御するので注意 V6 スレッド1 V7 クライアント ライブラリ キュー・ マネージャー スレッド1 スレッド2 スレッド2 スレッド3 スレッド3 スレッド4 スレッド4 30 クライアント ライブラリ キュー・ マネージャー <WebSphere MQ V7 Update Workshop> TCP/IPソケットの共用(続き) SHARECNV属性、アプリケーションの接続オプション(MQCNO)により動作を制御 SHARECNV属性の指定はMQCNOより優先 ただし、MQCNO_NO_CONV_SHARINGはSHARECNV属性より優先 SVRCONN/CLNTCONNチャネルのSHARECNV属性 SHARECNV (2∼999999999) 1ソケットが共用するチャネル・インスタンスの最大数を指定(ソケットの共用を行う) V7の新機能を使う –コールバック、メッセージ先読み、双方向ハートビート、チャネルの静止モードでの停止(※)は 動作する ※SVRCONNチャネルのSTOP CHANNEL() MODE(QUIESCE) SHARECNV (1) ソケットの共用を行わない V7の新機能を使う –コールバック、メッセージ先読み、双方向ハートビート、チャネルの静止モードでの停止は 動作する SHARECNV (0) ソケットの共用を行わない V7の新機能を使わない(従来の動作を維持) –コールバック、メッセージ先読み、双方向双方向ハートビート、チャネルの静止モードでの停止は 動作しない 31 <WebSphere MQ V7 Update Workshop> TCP/IPソケットの共用(続き) MQCNO構造体 MQCNO_ALL_CONV_SHARING(デフォルト) ソケットの共用を行う MQCNO_NO_CONV_SHARING ソケットの共用を行わない 双方向ハートビート、チャネルの静止モードでの停止は行う 32 <WebSphere MQ V7 Update Workshop> TCP/IPソケットの共用(続き) 設定方法 SHARECNV デフォルト: 10 SVRCONNとCLNTCONNの両方で指定した場合、小さい方の値が有効となる DEFINE CHANNEL() CHLTYPE(SVRCONN | CLNTCONN) SHARECNV( 0 | 1 | 2∼999 999 999 ) 状況確認方法 MAXSHCNV 1ソケットが共用可能な最大のチャネル・インスタンス数 CURSHCNV 1ソケットが現在共用しているチャネル・インスタンス数 DISPLAY CHSTATUS() CHLTYPE(SVRCONN) ALL | MAXSHCNV | CURSHCNV [出力結果] DISPLAY CHSTATUS() CHLTYPE(SVRCONN) CURSHCNV AMQ8417: チャネル状況の内容を表示します。 CHANNEL(TO.QM2) CHLTYPE(SVRCONN) CONNAME(127.0.0.1) CURRENT STATUS(RUNNING) SUBSTATE(RECEIVE) CURSHCNV(2) AMQ8417: チャネル状況の内容を表示します。 CHANNEL(TO.QM2) CHLTYPE(SVRCONN) CONNAME(127.0.0.1) CURRENT STATUS(RUNNING) SUBSTATE(RECEIVE) CURSHCNV(2) 33 <WebSphere MQ V7 Update Workshop> ブランク・ページ 34 <WebSphere MQ V7 Update Workshop> 双方向ハートビート 35 <WebSphere MQ V7 Update Workshop> 双方向ハートビート ハートビート(検査パケット)を キュー・マネージャー⇔MQクライアントの 双方向で送信し双方で早期に障害を検知 V6 MQクライアント アプリ Îゾンビ・チャネルの早期除去によるリソースの解放 CLNTCONN チャネル SVRCONN チャネル MQCONN キュー・ マネージャー MQOPEN MQPUT V6 MQGET wait タイミング:MQGET wait中のみ Wait Interval Îその他のタイミングではハートビートによる 障害検知はできない MQCLOSE ハートビート MQDISC 方向:キュー・マネージャー⇒クライアントの一方向 Îクライアントは次回MQI発行のタイミングで検知 V7 V7での拡張 MQクライアント アプリ タイミング:チャネル接続している間 (MQCONN∼MQDISC) Î全てのタイミングでハートビートによる 障害検知が可能 CLNTCONN チャネル MQCONN キュー・ マネージャー MQOPEN MQPUT MQGET wait 方向:キュー・マネージャー⇔クライアントの双方向 Îクライアントもハートビート送信エラー による障害検知が可能 MQCLOSE MQDISC ハートビート 36 SVRCONN チャネル <WebSphere MQ V7 Update Workshop> 双方向ハートビート(続き) SVRCONN/CLNTCONNチャネルのSHARECNV属性により動作を制御 SHARECNV (1, 2∼999999999) 双方向ハートビートを行う SHARECNV (0) 双方向ハートビートを行わない(従来の動作を維持) ハートビート送信間隔は従来通りSVRCONN/CLNTCONNのHBINT属性に指定 37 <WebSphere MQ V7 Update Workshop> ブランク・ページ 38 <WebSphere MQ V7 Update Workshop> チャネル数の制御 39 <WebSphere MQ V7 Update Workshop> チャネル数の制御 SVRCONNチャネル毎にクライアントからのインスタンス数を制限可能 キュー・マネージャーが存在するマシンのリソースを制御 単一クライアントが接続を独占することを防止 プログラムの不具合 DoS(Denail of Service)攻撃 計画外MQクライアント・アプリケーションの接続 SVRCONNチャネルのMAXINST、MAXINSTC属性により動作を制御 MAXINST・・・最大チャネル・インスタンス数 MAXINSTC・・・クライアントあたりの最大チャネル・インスタンス数 IPアドレス単位でクライアントを認識 クライアント1 クライアント1 MQCONN(QMGRA) ① クライアント2 MQCONN(QMGRA) ② クライアント3 MQCONN(QMGRA) ③ クライアントX MQCONN(QMGRA) QMGRA 【チャネル定義】 名称:TO.QMGRA タイプ:SVRCONN 最大インスタンス数:3 (MAXINST) アプリA MQCONN(QMGRB) ① アプリB MQCONN(QMGRB) ② アプリC MQCONN(QMGRB) ③ クライアント2 アプリA MQCONN(QMGRB) ④ 40 QMGRB ■ □ 【チャネル定義】 名称:TO.QMGRB タイプ:SVRCONN 最大インスタンス数:6 (MAXINST) クライアント毎 最大インスタンス数:2 (MAXINSTC) ④ アプリB MQCONN(QMGRB) ⑤ アプリC MQCONN(QMGRB) ⑥ ■ □:MAXINSTの カウント対象 ■:MAXINSTCの カウント対象 <WebSphere MQ V7 Update Workshop> チャネル数の制御(続き) MAXINST 同時に接続可能なサーバー接続のインスタンス数 設定変更後は新規に接続するインスタンスはエラーとなる キュー・マネージャーのエラー・ログにはAMQ9489が出力 既に接続しているインスタンスには影響なし キュー・マネージャーの指定(qm.iniなど)のMaxActiveChannelsの値を超えての 接続はできない MAXINSTC 1クライアントあたり同時に接続可能なサーバー接続のインスタンス数 設定変更後は新規に接続するインスタンスはエラーとなる キュー・マネージャーのエラー・ログにはAMQ9490が出力 既に接続しているインスタンスには影響なし MAXINSTの値を超えての接続はできない いずれもインスタンス数のカウント対象にゾンビ・チャネルが含まれる 41 <WebSphere MQ V7 Update Workshop> チャネル数の制御(続き) 設定方法 MAXINST デフォルト: 999 999 999 DEFINE CHANNEL() CHLTYPE(SVRCONN) MAXINST( 0 ~ 999 999 999 ) MAXINSTC デフォルト: 999 999 999 DEFINE CHANNEL() CHLTYPE(SVRCONN) MAXINSTC( 0 ~ 999 999 999 ) 42 <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け 43 <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け クライアント・チャネルに重み付けをし、接続先を分散することが可能 チャネル定義テーブル(CCDT: Client Channel Definition Table)でグループ化されている CLNTCONN チャネルが対象 CLNTCONNのAFFINITY属性がNONEの場合、CLNTWGHTに指定された値の割合で 接続先を分散 内部的に作成するチャネル・リストを基にチャネルを選択 プロセス(アプリケーション)内の初回MQCONN時に、チャネル定義テーブルを参照し チャネル・リストを作成 チャネル・リスト TO.QMGR_2 V7 TO.QMGR_1 アプリA MQCONN( *ANY.QMGR) チャネル定義テーブル チャネル名 CLNT WGHT チャネル・リスト QMNAME TO.QMGR_1 1 ANY.QMGR TO.QMGR_2 2 ANY.QMGR 1本 が接続(※) キュー・マネージャー QMGR_1 TO.QMGR_2 TO.QMGR_1 アプリB MQCONN( *ANY.QMGR) チャネル・リスト TO.QMGR_1 : TO.QMGR_2 = 1 : 2 で接続 TO.QMGR_1 リストの上位 から接続を試行 44 TO.QMGR_2 アプリC MQCONN( *ANY.QMGR) キュー・マネージャー QMGR_2 2本 が接続(※) ※上記は AFFINITY(NONE) の場合で、 おおよそ 1:2 の割合で接続先が選択される (幕張でのテスト結果) <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け チャネル・リスト アプリケーションごとに作成 CLNTCONNのAFFINITY属性によって作成されるチャネル・リストやその扱いが異なる 再配布などでチャネル定義テーブルに変更があると、チャネル・リストを再作成 ただし、クライアント・アプリケーションが、C、C++、.NETの場合のみ再作成 ユーザーはチャネル・リストを参照できない CLNTCONNチャネルのCLNTWGHT属性 0(デフォルト) 重み付けは行わない 1∼99 指定した値に基づき、重み付けを行う(99が最も優先度が高い) 0が指定されたチャネルが混在する場合、0が最も優先される 指定した重みは必ずしも保証されるものではない CLNTCONNチャネルのAFFINITY属性 NONE CLNTWGHTの値を基に宛先を選択 PREFERRED(デフォルト) CLNTWGHT=0 CLNTWGHT≠0 の場合、従来のチャネル定義テーブル使用時と同様に接続を試行 の場合、接続失敗後に優先順位が下がるので注意 45 <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け AFFINITY(NONE) 指定時の動作 MQCONNごとにCLNTWGHTの値を基に宛先を選択 使用可能でない宛先を識別しない チャネル・リスト内のチャネルの順序 に定義されたチャネルのうち、MQCONNで*指定した名称と同じQMNAMEを持つチャネル のみをリスト CCDT チャネル・リストの参照のされ方 0 のチャネルから、従来のロジックに従い接続試行を行う CLNTWGHT= 0 がない場合、CLNTWGHTの値を基に接続を試みる –CLNTWGHT の値が大きいチャネルは、使用される可能性が高い –接続に失敗しても、リストの末尾に移動することはない CLNTWGHT= 接続可能な 46 <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け チャネル定義テーブル AFFINITY(PREFERRED) 指定時の動作 チャネル名 同一マシンからの接続試行順序を保証 使用可能でない宛先に接続試行する可能性が低い 接続に失敗するとリストの末尾に移動するため CLNT WGHT TO.QMGR_A 5 ANY.QMGR TO.QMGR_B 30 ANY.QMGR TO.QMGR_C 15 ANY.QMGR チャネル・リスト内のチャネルの順序 AFFINITY(PREFERRED)での動作 に定義されたチャネルのうち、MQCONNで *指定した名称と同じQMNAMEを持つチャネルを 以下の優先順位でソート –CLNTWGHT =0 »数字順、アルファベット順 (従来通り) –CLNTWGHT ≠0 »CLNTWGHT の値を基にソート »CLNTWGHT の値が大きいチャネルは、 リストの上位に来る可能性が高い(※) クライアント・マシンで1度作成された チャネル・リストの順序は保証される –後続のプロセスも、初回MQCONN時に 同じ順序でチャネル・リストを作成 CCDT QMGR_A QMGR_B LQ QMGR_C LQ LQ ⑥ QMGR_Cへ ③ QMGR_Bへの接続失敗 QMGR_Cへ ①MQCONN実行 ⑤MQCONN実行 MQCONN( *ANY.QMGR) MQCONN( *ANY.QMGR) TO.QMGR_B TO.QMGR_C TO.QMGR_C TO.QMGR_A TO.QMGR_A TO.QMGR_B ②チャネル・リスト作成 ④TO.QMGR_Bの 優先順位が下がる チャネル・リストの参照のされ方 作成されたチャネル・リストの上位から接続を試みる CLNTWGHT≠0 QMNAME ※上記は幕張でのテスト結果 のチャネルで、接続に失敗したチャネルは、リストの末尾に移動(上図) 47 <WebSphere MQ V7 Update Workshop> クライアント・チャネルの重み付け 設定方法 CLNTWGHT デフォルト: 0 (V6と同様の動作、重み付けは行わない) 1が最も優先度が低く、99が最も高い DEFINE CHANNEL() CHLTYPE(CLNTCONN) CLNTWGHT( 0 ~ 99 ) AFFINITY デフォルト: PREFERRED DEFINE CHANNEL() CHLTYPE(CLNTCONN) AFFINITY( PREFERRED | NONE ) 48 <WebSphere MQ V7 Update Workshop> (補足) V6でのチャネルのグループ化 V6までのチャネル定義テーブルを使用したクライアント接続の動き CCDT内のチャネルを、数字順、アルファベット順に使用を試みる CCDTごとに接続順序が固定となる 接続順序を変更したい場合は、接続順序パターンごとに V6 CCDT を用意するなどの工夫が必要 チャネル定義テーブル1 を使用したアプリケーション こちらが必ず優先される チャネル定義テーブル1 クライアント接続チャネル名 CONNAME TO.SERVER.01 host1 ANY.QMGR TO.SERVER.02 host2 ANY.QMGR QMNAME MQCONN( *ANY.QMGR ) MQOPEN( LQ ) MQPUT MQCLOSE MQDISC TO. SERVER01 クライアント接続チャネル名 CONNAME TO.SERVER.04 host1 ANY.QMGR TO.SERVER.03 host2 ANY.QMGR QMNAME MQCONN( *ANY.QMGR ) MQOPEN( LQ ) MQPUT MQCLOSE MQDISC キュー・マネージャー QMGR_1 LQ TO.SERVER.01 チャネル定義テーブル2 host1 host2 キュー・マネージャー QMGR_2 LQ 49 <WebSphere MQ V7 Update Workshop> ブランク・ページ 50 <WebSphere MQ V7 Update Workshop> HTTPブリッジ 51 <WebSphere MQ V7 Update Workshop> HTTPブリッジ サポート・パックMA0Yの統合 MA0Y(IBM WebSphere MQ Bridge for HTTP)が製品に統合 Web2.0への対応 AJAX, RESTなどを使用したリッチ・クライアントからのMQへの容易なアクセス クライアント・サイドではMQクライアントの導入やMQIの開発スキルは不要 HTTPブリッジ(WebSphere MQ Bridge for HTTP)の概要 HTTPプロトコルとMQIをマップ J2EE 1.4に準拠したアプリケーション・サーバーで稼動するサーブレット WMQHTTP.war キュー・マネージャーとの接続は、アプリケーション・サーバーで設定 例) WASの場合、JMS接続ファクトリーで指定 J2EE 1.4 Application Server WebSphere MQ Bridge for HTTP HTTP Client HTTP プロトコル WebSphere MQ MQI 52 【HTTPプロトコルとMQIの対応表】 HTTPプロトコル マップされるMQIコール POST MQPUT GET MQGET with browse DELETE MQGET PUT − <WebSphere MQ V7 Update Workshop> HTTPブリッジ(続き) HTTPとMQIのマッピングはHTTPブリッジが実行 HTTP MQI URI 宛先 HTTP Verb MQI HTTPヘッダー MQMD HTTP entity body MQメッセージ HTTP Content-Type メッセージ・タイプ メッセージ属性は 'x-msg' の接頭部を持つHTTPヘッダーで設定 HTTP Request DELETE /msg/queue/replyQ/ HTTP/1.1 Host: www.mqhttpsample.com x-msg-wait: 10 x-msg-correlID: 1234567890 x-msg-require-headers: correlID HTTP Response HTTP/1.1 200 OK Content-Length: 60 Content-Type: text/plain x-msg-correlID: 1234567890 受信したメッセージの内容 x-msg で指定できるヘッダーは、HTTPブリッジでサポートされるMQMDのみ 使用可能なメッセージ属性 主要なMQMDフィールドをサポート x-msg-correlId、x-msg-msgId、x-msg-expiry、x-msg-replyTo など 53 <WebSphere MQ V7 Update Workshop> HTTPブリッジ(続き) サポート・パックMA0Yは引き続き提供 [MA0Y: IBM WebSphere MQ Bridge for HTTP] http://www-1.ibm.com/support/docview.wss?uid=swg24016142 サポート・パックMA94にてJ2EE環境非依存のネイティブHTTPリスナーを提供 [MA94: WebSphere MQ HTTP Native Listener] http://www-1.ibm.com/support/docview.wss?uid=swg24017593 ※AS-ISで提供(サポート・パック カテゴリー2) 54 <WebSphere MQ V7 Update Workshop> <参考>HTTPブリッジ使用時の処理フロー例 HTTPとMQIの マッピング J2EE 1.4 準拠のAPサーバー ユーザーの 開発範囲 POST HTTP要求 http://host/msg/ queue/REQ_Q ネームスペースを lookup コネクション・ファクトリーを作成 宛先を作成(REQ_Q) メッセージ送信 HTTP応答 アプリケーション DELETE HTTP要求 http://host/msg/ queue/REP_Q キュー・マネージャー HTTP.QM WMQHTTPServlet ネームスペース を lookup コネクション・ファクトリーを作成 宛先を作成(REP_Q) メッセージ受信 HTTP応答 バインディング接続 or クライアント接続 アプリケーション JNDI ネームスペース 名前 WMQHTTPHTTPConnectionFactory(固定) JNDI jms/WMQHTTP Qmgr HTTP.QM REQ_Q REP_Q リソース参照: jms/QueueFactory JNDI: jms/WMQHTTP 55 <WebSphere MQ V7 Update Workshop> ブランク・ページ 56 <WebSphere MQ V7 Update Workshop> MQ Explorerの機能拡張 57 <WebSphere MQ V7 Update Workshop> キュー・マネージャーのグループ化 複数のキュー・マネージャーをグループ化し、グループ単位の操作が可能 単位は「セット」、MQ Explorer内でのみ有効 実施可能な操作は、表示/非表示の指定、一括起動/停止など テスト/本番環境やプラットフォーム別などに分類し、一括管理する場合に有用 セット内キュー・ マネージャーの 状況表示 セット内キュー・ マネージャーを 停止 58 <WebSphere MQ V7 Update Workshop> エクスポート/インポート機能 MQ Explorer設定をエクスポート/インポートすることが可能(V6.0.2以降) 対象は画面表示設定、リモート・キュー・マネージャーへの接続定義、キュー・マネージャー・ セットなど MQ Explorerの設定を他の端末へ移行するときに有用 対象とファイル名 を指定して エクスポート 59 <WebSphere MQ V7 Update Workshop> リモート・キューマネージャー接続時のセキュリティ向上 リモート・キュー・マネージャー接続時のユーザーID/パスワードを指定可能 キュー・マネージャーのセキュリティExitで検査するユーザーIDとパスワードを指定 内部的にパスワード・サーバーを保持し、指定した情報を保管 セキュリティExitを使用しない場合、ユーザーIDはMCAUSERとして認識するが、 パスワードは検査されない ユーザーIDと パスワードを 指定 リモート・キュー・ マネージャーの 定義 60 <WebSphere MQ V7 Update Workshop> リモート・キュー・マネージャー接続時のセキュリティ向上(続き) リモート・キュー・マネージャー接続時のセキュリティExitを指定可能 C、Javaで作成したクライアントのセキュリティExitを指定 Exitの名称、Exitプログラムのディレクトリ/JARファイル、Exitに渡すパラメータを指定 セキュリティExit を指定 リモート・キュー・ マネージャーの 定義 61 <WebSphere MQ V7 Update Workshop> メッセージのブラウズ時の表示指定 メッセージをブラウズする時の表示方法を指定可能 ブラウズする最大メッセージ数 メッセージ・プロパティの表示の有無 ・最大参照メッセージ ・最大表示データバイト数 の指定が可能 メッセージ・プロパティの 表示指定が可能 62 <WebSphere MQ V7 Update Workshop> <付録> 属性及びパラメータの追加/変更 63 <WebSphere MQ V7 Update Workshop> キュー・マネージャーの新規属性 ALTER QMGR DISPLAY QMGR 属性 (デフォルト値) 説明 関連機能 MARKINT (5000) メッセージに付与されたマークがキュー・マネージャーにより除去されるまでの 時間 メッセージのブラウズ MAXPROPL (NOLIMIT) メッセージに関連付けられるプロパティの最大長をbyte単位で指定 メッセージ・プロパティ PARENT (<ブランク>) 階層型Pub/Subで自身の親となるキュー・マネージャー名称 Pub/Sub PSMODE (ENABLED) Pub/Subブローカーを稼働するか否か Pub/Sub PSNPMSG (DISCARD) Pub/Subブローカーがノンパーシステントのパブリケーション・メッセージを サブスクライバーキューやデッドレターキューに出力できなかった場合の処理 Pub/Sub PSNPRES (NORMAL) Pub/Subブローカーがノンパーシステント・メッセージの応答メッセージを 返せなかった場合の処理 Pub/Sub PSRTYCNT (5) Pub/Subブローカーが同期点付きコマンドメッセージの処理に失敗した場合 レポート・オプションに従って処理する前にコマンドをリトライする回数 Pub/Sub PSSYNCPT (IFPER) Pub/Subブローカーがコマンドメッセージを同期点付きで処理するか否か Pub/Sub SCYCASE (UPPER) セキュリティ・プロファイルが大文字のみか否か z/OSセキュリティ ※z/OSのみ TREELIFE (1800) 非管理トピックの持続時間 Pub/Sub 64 <WebSphere MQ V7 Update Workshop> キューの新規属性 DEFINE QLOCAL/QMODEL/QALIAS/QREMOTE ALTER QLOCAL/QMODEL/QALIAS/QREMOTE 属性 (デフォルト値) 説明 対象キュー・タイプ 関連機能 DEFPRESP (SYNC) メッセージ送信の応答タイプのデフォルト QL/QM/QA/QR 非同期メッセージ送信 DEFREADA (NO) ノン・パーシステント・メッセージの先読み 機能の使用可否のデフォルト QL/QM/QA メッセージ先読み PROPCTL (COMPAT) メッセージ・プロパティの制御方法 QL/QM/QA メッセージ・プロパティ TARGET (<ブランク>) 別名キューが指すキュー/トピックの名称 QA Pub/Sub ※TARGQは互換性のため 残るが同時指定は不可 TARGTYPE (QUEUE/TOPIC) 別名が解決するオブジェクトのタイプ QA Pub/Sub ※キュー・タイプは以下の通り QL:ローカル・キュー/QM:モデル・キュー/QA:エイリアス・キュー/QR:リモート・キュー 65 <WebSphere MQ V7 Update Workshop> チャネルの新規属性 DEFINE CHANNEL CHLTYPE SVRCONN/CLNTCONN/その他 ALTER CHANNEL CHLTYPE SVRCONN/CLNTCONN/その他 属性 (デフォルト値) 説明 対象チャネル・タイプ 関連機能 MAXINST (999 999 999) 同時に接続可能なチャネル・ インスタンス数 SVRCONN クライアントのチャネル数の 制御 MAXINSTC (999 999 999) 1クライアントあたり同時に接続可能 なチャネル・インスタンス数 SVRCONN クライアントのチャネル数の 制御 PROPCTL (COMPAT) メッセージ・プロパティーの制御方法 SDR/SERVER/ CLUSSDR/CLUSRCVR メッセージ・プロパティ CLNTWGHT (0) グループ化された各クライアント・ チャネルに対する重みの値 CLNTCONN クライアント・チャネルの 重み付け AFFINITY (PREFERRED) 同一マシンからの接続試行順序を 保証するか否か CLNTCONN クライアント・チャネルの 重み付け SHARECNV (10) 1つのソケットが共用するチャネル・ インスタンスの最大数 SVRCONN/CLNTCONN TCP/IPソケットの共用 66 <WebSphere MQ V7 Update Workshop> ログ関連パラメータのデフォルト値の変更(UNIXのみ) V7を新規導入しキュー・マネジャーを作成する場合、ログ・サイズの変更に注意 crtmqmコマンドのログ・サイズのデフォルト値の変更(UNIXのみ) -lf <LogFilePages> –オプション無指定時のデフォルト値が、1024ページ(4MB)→4096ページ(16MB)に変更 構成ファイル(mqs.ini、qm.ini)のログ・サイズ、ログ・バッファー・サイズのデフォルト値の変更 (UNIXのみ) LogFilePagesのデフォルト値 –mqs.ini、qm.iniのLogFilesPagesのデフォルト値が1024ページ→4096ページに変更 LogBufferPagesのデフォルト値 –mqs.ini、qm.iniのデフォルトLogBufferPages=0指定でキュー・マネージャーがサイズを選択 –上記の値が128ページ(512KB)→512ページ(2048KB)に変更 V7に移行する場合、ログ・サイズの変更はなし 既存キュー・マネージャーのログ・サイズ、ログ・バッファーサイズはV7移行後も保持される V7への移行時、既存のmqs.ini、qm.iniは更新されない 67 <WebSphere MQ V7 Update Workshop> ブランク・ページ 68