naobe @ ウィキ

WebSphere MQ

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可
IBMに戻る


WebSphere MQとは

  • キューを介してデータ交換を行うため相手側アプリケーションが稼働しているかどうかといった状況に依存しない(非同期通信)
  • プラットフォーム独立。各プラットフォームに共通のコマンドやプログラミング・インターフェースを提供している。

分散処理での通信モデル

項目 説明
会話型 クライアント・サーバ。アプリケーションは、セッションを接続ごとに作成しなければならない。
RPC セッションはRPCが作成する。クライアントは応答を待たなければならない(ブロッキング)。
メッセージ・キューイング方式 セッションはMQが作成する。受信側は必要な時にキューからデータをうけとるので、送信側は応答を待たなくて良い。

【会話型】

【RPC】

【メッセージ・キューイング】

WebSphere MQの構成要素

キュー・マネージャー

WebSphere MQの中心となるオブジェクトで、資源の管理、メッセージ転送、管理コマンドの提供を行う。キューマネジャーは1つのプラットフォームに複数稼働できる。
【キューマネジャー】

【キューマネジャーとの接続】

キューマネジャーの属性

  • システム管理コマンドのバージョン
  • メッセージの最大長
  • デッドレター・キューの名前
  • 文字セット番号((CCSID:Coded Character Set ID)
  • パフォーマンス生成用のイベント発生有無
  • パフォーマンス・データや活動状況収集有無

メッセージ

【メッセージの構成】

ヘッダ

以下のフィールドを持つ
  • メッセージ識別フィールド
  • メッセージ属性
  • アプリケーションための各種情報フィールド
MQMD構造体を用いてアクセスする。

ユーザデータ

アプリが 定義したデータ

キュー

物理構成からの分類

  • パーシステント:ディスク
  • ノンパーシステント:メモリ

タイプ

項目 説明
ローカルキュー/リモートキュー ローカルキュー:キューマネジャーと同じマシンにあるキュー。リモートキュー:キューマネジャーと異なるマシンにあるキュー。
別名キュー 1つのキューに対して複数の別名キューを作成することで、属性を変えることができる。別名キューとキューのリンクを変えることでアプリに影響なしに実体のキューを変えることができる(アプリで設定ファイルを使えばこの機能は不要)。
モデルキュー/動的キュー 動的キュー:キューのサイズを使用時に決めることができる。資源の節約になる。モデルキュー:動的キューを作成するための テンプレート。
クラスタキュー

チャネル

メッセージ転送を行うための「通信回線」のこと。
  • キュー・マネージャー同士を接続するもの
  • MQIクライアントとキュー・マネージャーとを接続するもの

キュー・マネージャー同士を接続するチャネル

メッセージチャネルとよぶ。1方向/1チャネル。
【送信側チャネル】
  • SENDERチャネル
  • REQUESTERチャネル
  • クラスター送信チャネル
【受信側チャネル】
  • RECEIVERチャネル
  • SERVERチャネル
  • クラスター受信チャネル

SENDERチャネルとRECEIVERチャネル、REQUESTERチャネルとSERVERチャネルの組み合わせが良く使われる。



メッセージ

アプリケーションから見たメッセージとキューマネジャーから見たメッセージはサイズが異なる場合がある。

メッセージとは

扱うことができるタイプ
  • テキスト
  • バイナリ
  • テキストとバイナリの混合

メッセージの最大長は、100MB

メッセージの構造

ヘッダ

ヘッダはMQMD構造体(cmqc.h)で表される。

typedef struct tagMQMD MQMD;
 
 
struct tagMQMD {
  MQCHAR4   StrucId;           /* Structure identifier */
  MQLONG    Version;           /* Structure version number */
  MQLONG    Report;            /* Options for report messages */
  MQLONG    MsgType;           /* Message type */
  MQLONG    Expiry;            /* Message lifetime */
  MQLONG    Feedback;          /* Feedback or reason code */
  MQLONG    Encoding;          /* Numeric encoding of message data */
  MQLONG    CodedCharSetId;    /* Character set identifier of message
                                  data */
  MQCHAR8   Format;            /* Format name of message data */
  MQLONG    Priority;          /* Message priority */
  MQLONG    Persistence;       /* Message persistence */
  MQBYTE24  MsgId;             /* Message identifier */
  MQBYTE24  CorrelId;          /* Correlation identifier */
  MQLONG    BackoutCount;      /* Backout counter */
  MQCHAR48  ReplyToQ;          /* Name of reply queue */
  MQCHAR48  ReplyToQMgr;       /* Name of reply queue manager */
  MQCHAR12  UserIdentifier;    /* User identifier */
  MQBYTE32  AccountingToken;   /* Accounting token */
  MQCHAR32  ApplIdentityData;  /* Application data relating to
                                  identity */
  MQLONG    PutApplType;       /* Type of application that put the
                                  message */
  MQCHAR28  PutApplName;       /* Name of application that put the
                                  message */
  MQCHAR8   PutDate;           /* Date when message was put */
  MQCHAR8   PutTime;           /* Time when message was put */
  MQCHAR4   ApplOriginData;    /* Application data relating to
                                  origin */
  /* Ver:1 */
  MQBYTE24  GroupId;           /* Group identifier */
  MQLONG    MsgSeqNumber;      /* Sequence number of logical message
                                  within group */
  MQLONG    Offset;            /* Offset of data in physical message
                                  from start of logical message */
  MQLONG    MsgFlags;          /* Message flags */
  MQLONG    OriginalLength;    /* Length of original message */
  /* Ver:2 */
};

ReplyToQには返信の宛先キューを設定する。ReplyToQMgrには返信先のキューマネジャーを設定する。

送信側は、MsgIdにメッセージを特定するIDをセット。受信側はMsgIdを読み込み、応答メッセージのCorrelIdにMsgIdの値をセットして返す。送信側は、キューからCorrelIdで検索して応答を取得する。

【使用例】
人気記事ランキング
ウィキ募集バナー