IBM MQ

**IBM MQ**（アイビーエム エムキュー）はIBMが開発・販売するメッセージングミドルウェアである。旧称は**MQSeries**、**WebSphere MQ**など。メッセージキュー方式の信頼性が高く非同期通信も可能なマルチプラットフォーム対応のメッセージ通信を提供する。システム連携などで使用される。

IBM MQ は各種プラットフォームでの時間を保証したメッセージ配信を行う。メッセージ交換の信頼性と堅牢性を強化し、メッセージを失わないことを保証する。

MQ は時間に依存しないアーキテクチャを構成する機構も提供する。メッセージをあるアプリケーションから別のアプリケーションに送信するとき、相手のアプリケーションがその時点で動作していなくてもよい。受信側アプリケーションが動作していないときにメッセージが送られた場合、キューマネージャが受信側が問い合わせてくるまでそれを保持しておく。メッセージの順序性はFIFO順で保持される。これは IBM MQ のキューマネージャに限った機能ではない。

通信相手のアーキテクチャの違いを IBM MQ で変換することによって対応することができる。例えば、ビッグエンディアンからリトルエンディアンへの変換やEBCDICからASCIIへの変換である。これは、"Exits" と呼ばれるアプリケーションコードで実行される。Exits はキューマネージャ上で動作し、必要に応じてデータ変換を行う。

IBM MQ は他のアプリケーションを起動するためのメッセージを受け付けて起動を実施できる。これによりメッセージ駆動型アーキテクチャを実現できる。

## 詳細
### コンポーネント
IBM MQ の中核となるのは「キューマネージャ」(**MQ Manager**、**MQM**)である。キューマネージャは記憶装置を操作し、タイミング問題を扱い、アプリケーション起動を行い、その他のデータの転送には直接関係しない機能を持っている。

キューマネージャは、同じホスト上で動作するソフトウェアとは **Bindings** と呼ばれるコネクションを持ち、ネットワーク経由では他のホスト上のソフトウェアとの間で **Client** と呼ばれるコネクションを持つ。同じホスト上のソフトウェアと Client コネクションで繋げることもできる。Bindings の方が高速だが Client の方が堅牢であり、アプリケーションの設計を容易に変更可能である。

キューマネージャ間の通信は **Channel** と呼ばれる別のプログラムが担当する。Channel はキューマネージャと同じホスト上で動作し、ネットワーク経由のデータ送受信を受け持つ。TCP/IP のネットワークでは、Channel は特定のポートでデータの送受信を行う。

Client コネクションでアプリケーションとキューマネージャ間の通信を行うプログラムは Listener と呼ばれる。Listener はアプリケーションから見たキューマネージャのネットワークインタフェースとなっている。TCP/IP ネットワークでは、Listener は特定ポート上で "listen" する（パケット受信を待ち受けること）。

### キューイング
メッセージのキューイングは2つの部分からなる。
* **メッセージ**とは、バイナリまたはASCIIのデータの集合体であり、関係するプログラムにとって意味のある内容である。通信プロトコルとしては、ルーティングなどの情報が転送前にメッセージに付与され、受信先アプリケーションに到達する前にそれら情報が捨てられ、メッセージだけが届けられる。
* **メッセージキュー**とは、アプリケーション内でメッセージを格納するオブジェクトである。

「キューマネージャ」は MOM に必ずあるわけではないが、IBM MQ では必要不可欠であり、メッセージキューの論理的コンテナを提供するシステムサービスであると共に、「メッセージチャンネル」を経由してメッセージを他のキューに転送する役割を持つ。

この技術の利点は以下の通り。
* メッセージはTCP/IPのような純粋なパケット通信による転送に依存しない。このため、送受信を行うアプリケーション同士の結合度が弱く、非同期な運用も可能である。
* メッセージは一度しか送られない。ネットワーク上の問題は全てキューマネージャが対応する。

### API
IBM MQ の機能を利用する方法はいくつもある。IBM がサポートする API として以下のものがある。
* IBM Message Queue Interface (MQI) : C言語、COBOL、PL/I、Java
* Java 向けには J2EE で標準化された JMS もある。
* C/C++ と .NET 向けの XMShttp://www-128.ibm.com/developerworks/websphere/library/techarticles/0509_phillips/0509_phillips.html

IBMがサポートする以外にも各種APIが存在する。例えば、モルガン・スタンレーが開発したPerl用インタフェースがCPANから入手可能である。http://search.cpan.org/~hbiersma/MQSeries-1.23/MQSeries.pm

## 歴史
*MQSeriesリリース前
**1964年 System/360がリリースされたとき、BTAM と QTAM（Basic and Queued Telecommunication Access Methods）が通信手法として提供された。
**1971年 TSO（Time-Sharing Option）と共に TCAM（Telecommunication Access Method）が登場。
**1971年12月 CICSとTCAMの連携が発表され、1972年12月にリリース。

*MQSeries時代
**1993年 MQSeries V1（メッセージ・キューイング。TCAM の機能を IBM 以外のプラットフォームでも使えるよう拡張した）
**1995年 MQSeries V2（分散系プラットフォームへの拡張、トリガリング、コード変換、プライオリティ、Non-Persistentメッセージ）
**1997年 MQSeries V5.0（メッセージサイズ拡張、C++やJavaのサポート ）
**1999年 MQSeries V5.1（クラスタリング（MQクラスター）、GUI管理ツール（MQエクスプローラ） ）
**2001年 MQSeries V5.2（パフォーマンス改善、Linuxのサポート）

*WebSphere MQ時代
**2002年 WebSphere MQ V5.3（MQSeries から名称変更、SSLサポート）
**2004年 王立工学アカデミーhttp://www.raeng.co.ukから MacRobert 賞http://www.raeng.co.uk/prizes/macrobert/を授与されたhttp://www.raeng.co.uk/prizes/macrobert/winners/win2004.htm。
**2005年 WebSphere MQ V6（64ビット対応、Eclipseベースのユーザインタフェース）
**2008年4月 WebSphere MQ V7.0（パブリッシュ/サブスクライブ・メッセージングおよびJMSの拡張）
**2014年3月 IBM MQ V8.0
**2016年6月 IBM MQ V9.0

## 出典


## 関連項目
*メッセージキュー
*WebSphere Application Server
*IBM Db2

## 外部リンク
* IBM マーケットプレイス
* IBM ソフトウェア
* IBM 無料評価版
* IBM Knowledge Center - MQ概要 - V8.0