IBM MQ on Cloud を試してみる

使い方メモです。

最近は[MQがCloud](https://www.ibm.com/jp-ja/cloud/mq)で使えるんですね。しかもLiteプランがあるので、お試し程度なら無料で使えます。10年以上ぶりに使う機会があったので、IBM MQ on Cloud　ライト・プランのお試し方法を説明します。ただこれを書いた時点では日本のロケーションにはサービスがないようでした。

なお、 2022/11/30現在、Liteプラン・サービスには以下の制限があります:
- 1カ月当たりのメッセージ数の上限は 10,000 件
- 非アクティブで 30 日経過すると削除されます


# 0. 前提
1. IBM Cloudのアカウントがあること
前提は有効なIBM Cloudのアカウントがあることです。
お持ちでないかたは [こちら](https://cloud.ibm.com/registration) でアカウント作成をお願いします。有効なメールアドレスとクレジットカード情報が必要です。
当記事で紹介する「MQ on Cloudの**ライト・プラン**」を使用の場合は課金されることはありません。間違って他のプランを選択することないようにくれぐれもご注意ください。

1. 使用可能なAPIKEYがあること
    APIKEYが無い場合は「[IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)」を参考に取得しておいてください。
    MQ GET/PUTで使用します。


# 1. IBM Cloudにログイン
https://cloud.ibm.com よりIBM Cloudにログインします。

# 2. MQサービスの作成
## 2.1　「カタログ」をクリック　（「リソースの作成」をクリックでもOK）
ダッシュボードが表示されるので、上部のメニューにある「カタログ」をクリックします。「リソースの作成」をクリックでもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f0d2944e-3800-52b4-e6d0-0b17822bda0e.png)

## 2.2 「カタログを検索...」　入力フィールドに`MQ`と入れ、表示された「MQ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/621942ab-fa55-1b8c-4f36-0677011c074d.png)

MQのサービス作成画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a1ecc96a-9df3-59e9-2f73-39783bf062ef.png)

## 2.3 詳細の設定
以下を選択または確認します。

- ロケーションの選択
    - 日本にはないので、適当に近い場所を選びます。そのままダラスでもよいです。


- 料金プランの選択
  - **ライト** にチェックがついていることを確認　（チェックがついていない場合はクリックしてチェックする)
  - ライトは1idにつき1つしか作成できませんので、既に作成済みの場合は作成できません。
  - 「MQ on Cloudの**ライト・プラン**」を使用の場合は課金されることはありません。間違って他のプランを選択することないようにくれぐれもご注意ください。

- リソースの構成: 必要なら更新
 - 　そのままでもよいです。リソースリストに表示される名前なので、わかりやすくしたい場合は変更してください。

- ご利用条件の同意
    - 「作成」ボタンの上のご利用条件を読み、問題ばければ「以下のご利用条件を読み。同意します。」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/868dfc6d-2b75-a6ae-07bc-7834c0579d69.png)

## 2.4 作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/5d79b46b-925a-6646-ac4c-a889e206a884.png)

しばらくするとMQの詳細画面になるので、これで作成完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f8bae591-df80-5932-d5e5-be70d419ced6.png)

# 3. キュー・マネージャーの作成
サービスができたらキュー・マネージャーを作成します。
## 3.1 「キュー・マネージャー」タブの「作成＋」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c3b42533-b786-f50a-247f-e60803591bf1.png)

## 3.2 「キュー・マネージャー名」に適当な名前を入れて、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0a089ca4-9375-7aff-5143-6adb27b6a948.png)

以下のようなウィンドウが表示された場合は「続行」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f4b0705c-87c0-39b3-4f70-951551a31a1f.png)

状況が「実行中」になるまで、5分〜10分程度待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/687a39f6-2766-b047-1f00-c632f4db83c5.png)
↓
状況が「実行中」になれば、作成完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1de056de-df15-0c1f-23c2-f6645852b54b.png)

# 4. キューの作成
## 4.1 作成したキュー・マネージャー名をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/071750e9-f547-cb05-5bbb-7d527e7bcfd4.png)

構成が表示されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/5dab9de5-894d-5a4f-d6c0-aaf02c7f7f68.png)


## 4.2 「管理」タブをクリックし、「MQコンソールの起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/fc4e2708-39ac-2e8c-229a-7c2e7d24855b.png)

新しいブラウザー画面が立ち上がり、MQコンソールの画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9db28d66-9d1d-57b1-a709-e369f318e0ab.png)

## 4.3 「キューの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/aa152638-02e9-26b2-5145-2f50d1619bd7.png)

## 4.4 「ローカル」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/47cedbdb-32a2-1dc0-8713-ff313514a5e5.png)

## 4.5 「キュー名」に適当な名前を記入後、「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/98467f92-ad9f-fa91-22b9-de18a81c4b29.png)

作成後ホーム画面に戻ります。「qm01の管理」（qm01は作成したキュー・マネージャー名）をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4ecb2f64-c4e9-9129-7d3e-f59c21a4d490.png)

キューのタブで、自分の作成したキューが表示されているのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/cf255417-7add-3a83-5f38-f7246de9c921.png)

# 5. REST APIでPUT/GETしてみる

では作成したキューにメッセージをPutしてGetしてみましょう。
curlで呼べる[REST API](https://cloud.ibm.com/docs/mqcloud?topic=mqcloud-mqoc_qm_rest_api)を使用します。
詳細の参考：　[Messaging using the REST API](https://www.ibm.com/docs/en/ibm-mq/9.1?topic=mq-messaging-using-rest-api)


## 5.1 必要情報の取得

[REST API](https://cloud.ibm.com/docs/mqcloud?topic=mqcloud-mqoc_qm_rest_api)を使う際に必要な情報を取得します。

「4.2 「管理」タブをクリックし、「MQコンソールの起動」をクリックします。」で表示されていた、
リソースリスト→MQサービス名をクリック→Manage→[キューマネージャー名をクリック]の画面を表示します。
「構成」タブをクリックし、`メッセージングの REST エンドポイント`の値をコピーして、エディターなどどこかにペーストしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ff444acb-db19-688b-6c7f-595b7467f5c9.png)

>Note:
>この内容は以下のようになっています：
`https://xxxxx.qm.xxxxx.mq.appdomain.cloud/ibmmq/rest/v3/messaging/qmgr/qm01/queue/<queue_name>/message`
>
>`xxxxx.qm.xxxxx.mq.appdomain.cloud`はホスト名です。以下のような組み合わせになっています：
`https://「ホスト名」/ibmmq/rest/v3/messaging/qmgr/「キューマネージャー名」/queue/「キュー名」/message`
>
>「ホスト名」と「キューマネージャー名」は既に入っているので、キュー名（`<queue_name>`の部分）のみ書き換えてREST Endpointとします。


上のキューマネージャー名の左側の矢印をクリックして、キューマネージャーのリストに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/29da615a-c8c6-ebf1-f2d3-7b4b120c0178.png)

「ユーザー資格情報」タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0a527ddc-7b8d-ec60-2ba9-08952ccc6a6d.png)

「管理者ユーザー名」を取得します。これがRESTAPIで指定する`userid`となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/fdc8cda6-66c7-5acc-fb38-84171ab7fa62.png)

あとはキュー名とAPIKEY(「0. 前提」で準備)が必要です。

まとめると以下の情報を準備してください:
- メッセージングの REST エンドポイント
- userid (管理者ユーザー名)
- キュー名
- APIKEY


## 5.2 メッセージのPUT

RESTAPI URLを以下で組み立てます：
　- 「メッセージングの REST エンドポイント」の値の`<queue_name>`の部分を自分のキュー名に置き換える

例:`<queue_name>`の部分を`q1`で置き換え
https://xxxxxx.qm.au-syd.mq.appdomain.cloud/ibmmq/rest/v1/messaging/qmgr/qm01/queue/q1/message


curlコマンド:
```
curl -X POST <<RESTAPI URL>> \
-u <<userid>>:<<APIKEY>> \
-H "Content-Type: text/plain" \
-H "ibm-mq-rest-csrf-token: value" \
--data "Hello MQ!"
```

コマンド例：
```
curl -X POST https://xxxxxx.qm.au-syd.mq.appdomain.cloud/ibmmq/rest/v3/messaging/qmgr/qm01/queue/q1/message \
-u xxxxxx:yyyyyyyyyyyyyy \
-H "Content-Type: text/plain;charset=utf-8" \
-H "ibm-mq-rest-csrf-token: value" \
--data "Hello MQ!"
```
Putが成功した場合は何のMessageもなく静かに終わります。。。。

## 5.3 MQコンソールでメッセージのPUTの確認
MQコンソールで確認します。

MQコンソールは、「4.　キューの作成」で使ってます。既に「MQコンソールの画面」のブラウザーがどこにもない場合は、
- 「[4.1 作成したキュー・マネージャー名をクリックします。](#41-作成したキューマネージャー名をクリックします)」から
- 「[4.2 「管理」タブをクリックし、「MQコンソールの起動」をクリックします。](#42-管理タブをクリックしmqコンソールの起動をクリックします)」
まで実行して、MQコンソールの画面を表示します。


MQコンソールのメインの画面の一番左上にあるタイルのメニュー
「xxxxの管理」　(xxxxはキュー・マネージャー名)
をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e48ece8c-e220-b998-9451-4910f410952a.png)

メッセージの送付先のキューの名前をクリックします：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/382eeb63-6956-9e65-774e-2d9aa939af31.png)

送付した日時のタイムスタンプでメッセージがあることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/89aab929-34f0-3c37-2e3c-cf518075be50.png)

メッセージのタイムスタンプをクリックすると詳細が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/00141361-50b5-54bc-202e-0003ccdc9a13.png)



## 5.4 メッセージのGET
RESTAPI URLを以下で組み立てます(PUTと同じです):
　- 「メッセージングの REST エンドポイント」の値の`<queue_name>`の部分を自分のキュー名に置き換える

例:`<queue_name>`の部分を`q1`で置き換え
https://xxxxxx.qm.au-syd.mq.appdomain.cloud/ibmmq/rest/v1/messaging/qmgr/qm01/queue/q1/message


curlコマンド:(メソッドはDELETEです)
```
curl -X DELETE <<RESTAPI URL>> \
-u <<userid>>:<<APIKEY>> \
-H "ibm-mq-rest-csrf-token: value"
```

コマンド例：
```
$curl -X DELETE https://xxxxxx.qm.au-syd.mq.appdomain.cloud/ibmmq/rest/v1/messaging/qmgr/qm01/queue/q1/message \
-u xxxxx:yyyyyyyyyyyyyyyy \
-H "ibm-mq-rest-csrf-token: value"
Hello MQ!
```
GETしたメッセージが表示されます。
この方法でメッセージを取得するとキューから削除されます。

## 5.3 MQコンソールでメッセージのGETの確認
MQコンソールで確認します。

PUTの時確認した情報が残っている場合は、作成ボタンの隣のリロードアイコンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/6ecd56e0-5709-357b-0a76-403061274408.png)

取得したメッセージが削除されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0adf7ae3-928c-801d-1f81-fbf77ad9980f.png)

以上です。