LoginSignup
13
7

More than 1 year has passed since last update.

Active MQを触ってみる

Last updated at Posted at 2022-03-16

はじめに

業務でActive MQを扱ったのですが、情報量の少ないシンプルなコンソールで、なかなか全体像が見えにくいと感じました。今回はActive MQや、そのようなMQサービスと連携できるAmazon MQについて概要をまとめてみようと思います。

Amazon MQとは

Amazon MQはAWSのサービスの一つです。マネージドメッセージブローカーサービスと呼ばれるものです。Active MQとRabbitMQなど、既存のMQサービスと連携して移行することができます。
メッセージブローカーサービスとは、2システムが直接メッセージデータのやりとりをするのではなく、その間に入って中継(ブローカー)するサービスのことを指します。

このようなサービスを使うことによって、2システム間でメッセージ送受信のタイミングを図らずとも、よしなにデータのやりとりをしてくれます。
また各コンポーネントを疎結合化し、相互の依存性を小さくすることで保守性も高めることができます。

AWSMQを使うメリットは以下のようなものがあります。

  • プロトコルはAWS独自のものではなく、業界標準のMQTTなどが使われているため、既存MQサービスからの移行が容易。
  • AWSのフルマネージドサービスであるため、自分でサーバなどを用意する必要がない。EC2のインスタンスが使われているようで、スケールはEC2と同じような選択肢の中から選ぶことができる。
  • AWSの一つであることからデータの耐久性や堅牢なセキュリティに長けている。
    [MQTTとは:非同期で軽量なメッセージのやりとりをする通信プロトコルのこと。HTTPに比べて送受信の効率がよく、媒体の消費電力も抑えられます。]

AWSには他にAmazon SNSやAmazon SQSというサービスがあります。
Amazon MQはその移行のしやすさから、既存で使っているメッセージングサービスから移行するときに選択することが多そうです。一方Amazon SNSやAmazon SQSは新規にメッセージングサービスを構築して運用していく場合に選択することが多いようです。

ActiveMQとは

ActiveMQはオープンソースのJavaベースのメッセージブローカーです。Apache License 2.0によるミドルウェアです。
[Apache License 2.0とは:オープンソースソフトウェアの開発や配布を行っているApacheの持つライセンスのこと。Swiftなどもこのライセンスのもとディストリビュートされている]

MQのサービスにはPublisher、Subscriber、Brokerの3つの考え方があります。
Publisherは直訳すると出版者、つまりメッセージを送る元になるシステムを指します。Subscriberは購読者、つまりメッセージの受け手です。Brokerは仲介者のことですので、MQのサービスを指します。

ActiveMQではさらに、QueueとTopic2つの概念があります。
Queueはメッセージの送信者と受信者が一対一で対応しているモデルを指します。一方のTopicは送信者一人に対して受信者が複数いるモデルとなります。

それでは次節から実際にローカルでAcriveMQを動かしてみて、コンソールの様子を眺めてみましょう。

ActiveMQのインストール

WindowsやLinux用のダウンロードは公式サイトからできますが、Macを使っている私はターミナルにて、以下のコマンドでインストールしました。

$ brew install apache-activemq
$ brew services start activemq

/usr/local/Cellar/activemq/x.x.x/ に最新バージョンのものがインストールされます。

コマンドにてActiveMQのインストール・起動が完了したら「http://localhost:8161/admin/ 」に接続します。ユーザ名とパスワードが要求された場合はいずれも初期値の「admin」を入力します。

MacOS版のインストールや起動方法についてはこちらの内容を参考にしました。
How to Install ActiveMQ server in MAC OS system?

このようなコンソールが表示されたかと思います。それではこちらの各ページの内容について見ていきます。

スクリーンショット 2022-02-25 18.54.26.png

試しにQueuesを動かしてみる

Queuesのタブをクリックします。前述の通りここに、送信者と受信者が一対一対応するQueueを設定することができます。
まずCreateの小窓にTestQueueと入力し、Queueを作成します。

スクリーンショット 2022-02-25 18.54.54.png

うまく作成されました。まだメッセージも何も送っていないため、それぞれの値は0になっています。

スクリーンショット 2022-02-25 18.55.32.png

続いて受信者であるConsumer側の反応を確認するため、ターミナルで以下のコマンドを入力します。

$ activemq consumer --destination queue://TestQueue

すると以下のようにリスニングを始めます。

 INFO | Connecting to URL: failover://tcp://localhost:61616 as user: null
 INFO | Consuming queue://TestQueue
 INFO | Sleeping between receives 0 ms
 INFO | Running 1 parallel threads
 INFO | Successfully connected to tcp://localhost:61616
 INFO | consumer-1 wait until 1000 messages are consumed

コンソールに戻ると、「Number of Consumers」が1になっているのがわかります。これでConsumer側がうまく認識されたことになります。

スクリーンショット 2022-02-25 18.56.16.png

それではOperationsのSend Toをクリックしてみましょう。
メッセージをsendするための設定画面が出てきました。message bodyの部分にテストメッセージを入力して「send」ボタンをクリックします。

スクリーンショット 2022-02-25 18.56.52.png

Consumer側のターミナルを確認すると、以下のメッセージが現れました。メッセージがうまく受信されたようです。

 INFO | consumer-1 Received Test message

メッセージを送った直後は「Number of Pending Messages」の値が増えて受信待ち状態になりますが、やがて「Messages Dequeued」の値が増えて送信完了状態となります。

スクリーンショット 2022-02-25 18.57.42.png

先ほど「consumer-1 wait until 1000 messages are consumed」というメッセージが表示されていたので、試しに1000件単位でメッセージを送ってみます。

スクリーンショット 2022-02-25 18.58.16.png

 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Received many messages
 INFO | consumer-1 Consumed: 1000 messages
 INFO | consumer-1 Consumer thread finished

このようにたくさんメッセージが受信された後、1000件に達した時点でConsumerのスレッドが一度閉じました。
何度か1000件単位で送ってみましたが、1000件送信されたのち、余剰の3件が受信待ち状態になる結果になりました。

スクリーンショット 2022-02-25 18.59.12.png

Topicsも触ってみる

Topicsの方を動かすには、まずSubscriberを設定してみます。Subscribersのタブから以下の設定で受信者を追加します。Client IDというのが必要になるようです。
先ほどから作成してあった「TestQueue」をそのまま指定してみます。

スクリーンショット 2022-02-25 19.00.35.png

色々試したので既にいくつか項目が存在していますが、Topicのタブを開いて「TestQueue」というTopicが追加されています。「Test」のSend Toからメッセージを送ってみます。

スクリーンショット 2022-02-25 19.01.01.png

以下の設定で送信します。Correction IDのところには先ほど設定したClient IDを記入しました。

スクリーンショット 2022-02-25 19.01.23.png

するとConsumer側のターミナルに以下が表示され、無事受信されたことが確認できました。

 INFO | consumer-1 Received これはトピックのテストメッセージです

終わりに

今回はAmazon MQやActive MQについて概要をまとめ、試しにQueuesとTopicsでメッセージを送信してみました。Queuesの方ではうまく送信できたようですが、TopicsをみるとJMS Selectorの設定値を入力する欄が存在するなど、未だはっきりしない部分が残っています。適切な設定の理解については今後の課題になってくるなと感じています。

参考にした記事:

Amazon MQ
Amazon MQ とは(AWS公式)
Amazon MQ とは?
Amazon MQってなんだろ?
【速報】新サービスAmazon MQを早速使ってみた! #reinvent
[AWS Black Belt Online Seminar]Amazon MQ
【徹底解説】AWSのメッセージングサービス
Amazon MQサービスについて
AmazonMQとは?メッセージブローカーサービス

Active MQ
Flexible & Powerful Open Source Multi-Protocol Messaging(公式)
ActiveMQ とは?
ActiveMQのインストールと使い方とQueueとTopicの違いについて
Active MQをUbuntuにインストールして動かしてみる
1.JMSの基礎
ActiveMQメッセージ管理(仕組み)

その他
MQTTとは
MQTT入門ガイド
Apache License 2.0とは?ライセンス内容をやさしく解説

13
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7