MQ on IBM Cloud(Beta>GA)を触ってみた


:triangular_flag_on_post: [2019/1/31付けで無償のLite Planで使えるようになったそうです](https://www.ibm.com/blogs/bluemix/2019/01/introducing-the-mq-on-cloud-lite-plan-and-frankfurt-region/)
:triangular_flag_on_post: [2018/3/14にBetaからGAに昇格](https://www.ibm.com/blogs/bluemix/2018/03/off-mq-ibm-cloud/)したそうなので、タイトルのみ変更しました。**以下の記事の内容はBeta時点のものですのでGAと違っている箇所があるかもしれません。**
:triangular_flag_on_post: [2018/2/14にExperimentalからBetaに昇格](https://www.ibm.com/blogs/bluemix/2018/02/mq-on-ibm-cloud-weve-hit-beta/)したそうなので、タイトルのみ変更しました。

# MQがIBM Cloud(PaaS)に登場!
ブログ[Experimental service for MQ on IBM Cloud is here](https://www.ibm.com/blogs/bluemix/2018/01/experimental-service-mq-ibm-cloud/)で「MQがIBM Cloudに登場したよ~」と知ったので早速触ってみました。MQは既に[AWS上でも利用可能](https://developer.ibm.com/messaging/2017/08/31/aws-quick-start-ibm-mq/)になっていますが、今回はIBM Cloud上でPaaS的に動くサービスのExperimental版です。

触ってみた結論を先に申しますと、オンプレミス版のMQ V9が**ほとんどそのまま**(※)動いており、既にMQをご存じの方は何の違和感もなくスムースに使える印象でした。

- MQ V9で提供されたMQのWeb管理コンソールが使えます
- 従来から提供されていた(クライアント上で動く)MQ Explorerやrunmqscコマンドもそのまま使えます

※個人的にはPythonから使ってみたかったんですが、MQLightもRESTも使えないように設定されているようなので、あきらめました。:cry:
:triangular_flag_on_post: ~~(2018/03/22)GA版ではユーザーやアプリケーションの権限が設定できるようになったので、REST APIも使えるんじゃないかと思います(やってません）~~(2018/04/18) GA版でもまだREST APIは使えないそうです。



# やってみた
YouTube動画 [Introducing MQ on IBM Cloud](https://www.youtube.com/watch?v=_C8JYUXcHx0)とほとんど同じですが、以下設定手順です。なお、以下がMQのマニュアルですが、ほとんど使えると思います。
[IBM MQ バージョン 9.0 資料](https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.helphome.v90.doc/WelcomePagev9r0.htm)

:triangular_flag_on_post: 以下の画面で設定情報などがそのまま出てますが、当該環境は削除済です。一応。

## MQサービスの作成
IBM [Cloudのカタログ](https://console.bluemix.net/catalog/?taxonomyNavigation=apps&search=mq)からMQを選択(画像は試験サービスのものなのでご注意ください)
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/29bdf889-4128-4c72-bb95-7aff2b0e29c0.png)

好きな名前でMQサービスを作成
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/89cb833c-2a0d-2764-2917-22f5f044825d.png)

## QueueManagerの作成
サービスが出来たらキュー・マネージャーを作成します。右上の「Create」ボタン

※ご参考だけですが私はFirefox Quantumを使っていて、[プライベート・ブラウジングでの高速化の設定](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1092730.html)をしていたために画面の下半分が表示されませんでしたが、設定を戻したら表示されました。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/fb2cf8dd-40b7-d26e-d4c6-71cf8ab65eae.png)

お好きな名前を付けて
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/c15e3511-027f-b776-b0ef-af9af2085781.png)

1-2分待ってるとキューマネージャーが起動します
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/83c110ce-ee0a-d6b1-9290-8752751c8169.png)

キューマネージャーをクリックすると詳細が見られます
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/64efb1b9-4dc1-60b8-830f-1eaff9e79348.png)

## API-Keyを入手する

管理コンソールにログインするためにAPI-KEYを取得します。
右上のメニューから「管理」－「セキュリティ」－「プラットフォームAPIキー」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/4f2d8f57-4258-889c-2298-dfa911f67316.png)

何も無ければ、「作成」（ 通常、この類の情報はサービスの「資格情報」から取るのですが、今は違うみたいです）

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/078b1f13-ed61-190b-de1d-a50974c1c6ab.png)

お好きな名前を入力して「作成」すると、APIキーが手に入ります。これは**後から参照できない**のでダウンロードするか、確実にコピペしておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/c9deb697-16d8-4a79-fe41-2b84f4d1a3e2.png)

これでAPIキーが入手できました

## MQ管理コンソールを起動する

:point_right: 新機能であるMQ管理コンソールについては[IBM MQ V9.0.1の新機能紹介](https://www.ibm.com/developerworks/jp/websphere/library/wmq/cd901_new/index.html)にご紹介があります。

キューマネージャーのパネルに戻り、右上の「管理」-「Launch MQ Console」でWebのMQ管理コンソールのログインパネルが開きますので、以下を入力

- ユーザー名: admin (決め打ち固定)
- パスワード: 前項で取得した**APIキー**

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/6717b8a5-f0ac-12e4-0f55-b56aefbdac62.png)

するとMQ管理コンソールが開きます
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/922cb976-fa82-9312-7b18-f2b65b4aae13.png)

デフォルトでいくつかのウイジェットが表示されており、左上のアイコンをクリックすると各オブジェクトの細かい属性を見ることができます。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/187db8bb-7c6e-b214-11f0-e2d514e4b0a1.png)

左上の「ウイジェットの追加」ボタンから非表示のウイジェットを追加もできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/bc5dabfc-51d5-9ef7-2973-0fbc584d43ac.png)

## Qを作って読み書きする

ではキューを定義します。左上の＋アイコンをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/dc801afe-ef0d-0211-6207-36b676f0bdf2.png)

お好きなキュー名を入力し、キュータイプは「ローカル」で「作成」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/dd89bbea-6229-6136-75b2-59eb38b3ab51.png)

キューができました
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/11ccc85f-d85e-6e6f-8fce-0ce5064b0e43.png)

キューにメッセージを書き込みます。
書き込み対象のキューが選択されている状態で「メール」のアイコン（「メッセージの書き込み」）をクリックし、適当なメッセージを入力し「書き込み」ボタン

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/90a5f0ed-ef90-92d6-3e4e-6d02f00aac97.png)

キューに１件メッセージが入りました
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/627eca60-b6b1-e976-60d1-24cb20a708a7.png)

ではキューからメッセージを読みます。
読み込み対象のキューが選択されている状態で「フォルダー」のアイコン（「メッセージの参照」）をクリックすると、内容が表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/fcc29f25-3253-acb5-06a4-38a4ffbacdb3.png)

## MQ Explorerを使う

V8までの管理ツールであるMQ Explorerをダウンロードして使うこともできます。ドキュメント[Administering a queue manager using MQ Explorer](https://console.bluemix.net/docs/services/mqcloud/mqoc_admin_mqexp.html#mqoc_admin_mqexp)にダウンロードの手順や設定の方法が書いてあるので詳細は割愛しますが、導入して設定すれば以下のように管理できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/e1aaea79-3c95-7a3e-95c3-fbf36883c9d0.png)

## MQ クライアント/runmqscコマンドを使う

MQクライアントをダウンロードして使うこともできます。ドキュメント[Administering a queue manager using runmqsc from an MQ client](https://console.bluemix.net/docs/services/mqcloud/mqoc_admin_mqcli.html#mqoc_admin_mqcli)にダウンロードの手順や設定の方法が書いてあるので詳細は割愛しますが、MQクライアントをダウンロード&導入して設定すれば以下のように使えます。


```bat:Windowsでの例
C:\Users\IBM_ADMIN>SET MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/qm1-e40b.qm.beta.mqcloud.ibm.com(32188)
C:\Users\IBM_ADMIN>SET MQSAMP_USER_ID=admin
C:\Users\IBM_ADMIN>SET MQCCSID=819
C:\Users\IBM_ADMIN>runmqsc -c -u admin -w60 QM1
5724-H72 (C) Copyright IBM Corp. 1994, 2017.
パスワードを入力してください:
********************************************
キュー・マネージャー QM1 に対して MQSC を始動中です。


PING QMGR
     1 : PING QMGR
AMQ8415I: Ping IBM MQ Queue Manager command complete.
END
     2 : END
2 コマンド応答を受信しました。


C:\Users\IBM_ADMIN>amqsputc Q1 QM1
Sample AMQSPUT0 start
Enter password: Z******************************************
target queue is Q1
THIS IS A MESSAGE FROM MQ CLIENT!

Sample AMQSPUT0 end

C:\Users\IBM_ADMIN>amqsgetc Q1 QM1
Sample AMQSGET0 start
Enter password: Z******************************************
message <THIS IS A MESSAGE FROM MQ CLIENT!>
no more messages
Sample AMQSGET0 end

C:\Users\IBM_ADMIN>
```
:warning: 私は日本語Windows環境でコマンド行から実施しています。キューマネージャーが819( Latin-1 ）で設定されているので、普通にrunmqscを実行すると以下のエラーがWindowsのイベントログに出力しエラーになります。そこでクライアントのMQCCSIDをキューマネージャーと一致させるために、追加でSET MQCCSID=819を行いました。

>データ変換に指定された CCSID がサポートされていません。
>ソース '819' またはターゲット CCSID '932' が無効か、現在サポートされていないため、プログラムが終了しました。  									
>無効な CCSID を修正するか、または要求された CCSID がサポートされていることを確かめてください。

## おまけ

MQはRESTでもアクセスできるようになったと聞いてはいたのですが、実際に試したことが無かったのでこの環境でやってみました。REST APIは大きくは①[管理のインターフェース](https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.adm.doc/q127590_.htm) ②[メッセージを扱うインターフェース](https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q131110_.htm)の2種類があります。実際のAPIや使いかたは本稿と関係ないので割愛しますが、結果としては①管理インターフェースは使える模様　②メッセージを扱うインターフェースは権限未設定のため使えない　ようでした。

管理の例 - ユーザーのログイン情報を取得できた
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/45ac7c2e-eb59-4f06-9024-c92a16dd8bfe.png)

データを扱う例 - メッセージをPOSTしようとしたが、怒られた。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/756ff9a1-41b7-1373-fe2c-7c1bcae73be3.png)

`MQWB0108E: The authenticated principal 'admin' is not granted access to any of the required roles: 'MQWebUser'.`とのことで、まあ設定してないなら、できなくてアタリマエですが。


以上です。