PowerShellでRabbitMQ

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジー技術部 武井です。今回は、PowerShellでRabbitMQでアクセスしたいと思います。

早速試してみよう

RabbitMQにアクセスするためのPowerShellはRabbitMQ公式ページで紹介されている以下のGitHubから入手出来ます。

https://github.com/mariuszwojcik/RabbitMQTools

上記のGitHubからCloneしてきて下さい。

Cloneしたものは、PowerShellのモジュールを置くフォルダに配置します。以下のコマンドを実行すると、モジュールを置くべきフォルダがわかります。

PS C:\ > $env:PSModulePath -split ';'
C:\Users\siosadmin\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules

上記のフォルダに置くと、Install-Moduleするだけで、モジュールが読み込まれます。

では早速・・・

PS C:\ > Import-Module RabbitMQTools
Import-Module : Errors occurred while loading the format data file:
C:\Program Files\WindowsPowerShell\Modules\RabbitMQTools\RabbitMqTools.Format.Ps1xml, , C:\Program
Files\WindowsPowerShell\Modules\RabbitMQTools\RabbitMqTools.Format.Ps1xml: The file was skipped because of
following validation exception: File C:\Program
Files\WindowsPowerShell\Modules\RabbitMQTools\RabbitMqTools.Format.Ps1xml cannot be loaded. The file C:\Pro
Files\WindowsPowerShell\Modules\RabbitMQTools\RabbitMqTools.Format.Ps1xml is not digitally signed. You cannot
script on the current system. For more information about running scripts and setting execution policy, see
about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170..
At line:1 char:1
+ Import-Module RabbitMQTools
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Import-Module], RuntimeException
    + FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand

ああ(´;ω;`)ブワッ

どうやらデフォルトの設定だと、信頼のおける発行者からの署名がないとスクリプトを実行出来ないようです。マイクロソフト認定のPowerShellでないとダメだということでしょうか?

この制限を回避するために、以下のようにします。

Set-ExecutionPolicy -ExecutionPolicy Bypass
PS C:\ > Import-Module RabbitMQTools

今度はOKでした。

では、実際に何か実行してみましょう。

PS C:\ > GetMessage -HostName localhost -UserName guest -Password guest -VirtualHost / -Name test -Remove

  # Queue                R Payload
--- -----                - -------
  1 test                   hoge

おお(`・ω・´)シャキーン

取得できました。

それぞれのパラメーターは以下のとおりです。

HostName:RabbitMQ Serverのホスト名
UserName:RabbitMQ Serverに登録したユーザーのユーザー名
Password:RabbitMQ Serverに登録したユーザーのパスワード
VirtualHost:RabbitMQのVirtual Host
Name:メッセージ取得対象のキューの名前
Remove:メッセージ取得後、そのメッセージを削除

ソースコード

GetMessage.ps1のソースコードを見てみました。一部抜粋です。

           $url = "https://$([System.Web.HttpUtility]::UrlEncode($ComputerName)):15672/api/queues/$([System.Web.HttpUtility]::UrlEncode($VirtualHost))/$([System.Web.HttpUtility]::UrlEncode($Name))/get"
            Write-Verbose "Invoking REST API: $url"

            $body = @{
                "count" = $Count
                "requeue" = -not [bool]$Remove
                "encoding" = $Encoding
            }
            if ($Truncate) { $body.Add("truncate", $Truncate) }

            $bodyJson = $body | ConvertTo-Json

            Write-Debug "body: $bodyJson"

            $result = Invoke-RestMethod $url -Credential $Credentials -AllowEscapedDotsAndSlashes -DisableKeepAlive -ErrorAction Continue -Method Post -ContentType "application/json" -Body $bodyJson

あれ?よくよく見ると、内部的にはこちらで紹介したRest APIを叩いているだけなんですね。

注意事項

このPowerShellは現時点(2018年2月28日)で最新のRabbitMQ(バージョン3.7.3)では動きません。3.7.3では、Rest APIの仕様が今までと違うようです。

さっきのソースコードにもあったようにメッセージを取得するRest APIのRequest Bodyは以下であるべきです。

{
  "count\":5,
  "requeue":false,
  "encoding":"auto"
}

確かに、3.3.5の時点の仕様を見ても、上記のようになっています。
https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_3_5/priv/www/api/index.html

しかし、最新のAPIの仕様では以下のようになっています。
https://rawcdn.githack.com/rabbitmq/rabbitmq-management/v3.7.3/priv/www/api/index.html

{
  "count":5,
  "ackmode":"ack_requeue_true",
  "encoding":"auto"
}

3.5.3ではrequeueだったのが、最新バージョンではackmodeになっています。まぁ、ソースを修正すれば大丈夫そうですね。

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる