RabbitMQ管理コマンド（rabbitmqctl）使い方


## 概要
rabbitmqctlを使うことで、RabbitMQサーバーに対して、vhost作成・ユーザ作成・権限付与などの管理作業を行うことができる

* https://www.rabbitmq.com/man/rabbitmqctl.1.man.html

## vhost
### vhost作成

```
$ sudo /usr/sbin/rabbitmqctl add_vhost <vhost name>
```

```text:例：/productionを作成
$ sudo /usr/sbin/rabbitmqctl add_vhost /production
```

```text:実行結果 
Creating vhost "/production" ...
...done.
```

### vhost確認
```
$ sudo /usr/sbin/rabbitmqctl list_vhosts
```

```text:実行結果
Listing vhosts ...
/
/production
...done.
```
`/`は名前なしのvhost。デフォルトで存在

### vhost削除
```
$ sudo /usr/sbin/rabbitmqctl delete_vhost <vhost name>
```

```text:例：/productionを削除
$ sudo /usr/sbin/rabbitmqctl delete_vhost /production
```

```text:実行結果 
Deleting vhost "/production" ...
...done.
```

## ユーザ

### ユーザ作成

```
$ sudo /usr/sbin/rabbitmqctl add_user <user> <password>
```

```text:例：user1(password=pass)を作成
$ sudo /usr/sbin/rabbitmqctl add_user user1 pass
```
v3.3.0から、guestユーザでのリモートサーバーへのアクセスができなくなったので、リモートからアクセスする場合は、ユーザを作らなければならない

```text:実行結果 
Creating user "user1 " ...
```

### ユーザ確認
```
$ sudo /usr/sbin/rabbitmqctl list_users
```

```text:実行結果
Listing users ...
guest   [administrator]
user1   []
```
`guest`はデフォルトで存在。ただし、localhost以外はアクセスできない（v3.3.0～）

### ユーザ削除

```
$ sudo /usr/sbin/rabbitmqctl delete_user <user>
```
```text:例：user1を削除
$ sudo /usr/sbin/rabbitmqctl delete_user user1
```

```text:実行結果 
Deleting user "user1" ...
```

## 権限

### 権限作成

```
$ sudo /usr/sbin/rabbitmqctl set_permissions -p <vhost name> <uesr> <permission>
```
```text:/productionに対して、user1の権限付与
$ sudo /usr/sbin/rabbitmqctl set_permissions -p /production user1 ".*" ".*" ".*"
```
 * ユーザだけ作成しても、権限が無いと、キューへの追加・削除はできない
 * 権限は左から、設定変更・書き込み・読み込み権限となる
 * 権限はvhostごとに付与するので注意（あるvhostに全権限付与しても、他のvhostには反映されない）

```text:実行結果 
Setting permissions for user "user1" in vhost "/production" ...
```

### 権限確認
```
$ sudo /usr/sbin/rabbitmqctl list_permissions -p <vhost name>
```

```text:例
$ sudo /usr/sbin/rabbitmqctl list_permissions -p /production
```

```text:実行結果
Listing permissions in vhost "/production" ...
user1   .*      .*      .*
```

### 権限削除
```
$ sudo /usr/sbin/rabbitmqctl clear_permissions -p <vhost name> <user>
```
```text:例
$ sudo /usr/sbin/rabbitmqctl clear_permissions -p /production user1
```

```text:実行結果 
Clearing permissions for user "user1" in vhost "/production" ...
```

## キュー

### キュー作成
rabbitmqctlでキュー作成は不可（`amqp`, `bunny`といったクライアントライブラリを使用）

### キュー確認
```
$ sudo /usr/sbin/rabbitmqctl list_queues -p <vhost name>
```

```text:例
$ sudo /usr/sbin/rabbitmqctl list_queues -p /production
```

```text:実行結果
Listing queues ...
queue1       0
queue2       2
...done.
```

vhost名はtypoしてもエラーにならないので注意すること（「Listing queues ...　...done.」とだけ表示される）

### キュー削除
rabbitmqctlで指定のキューだけ削除は不可（amqp, bunnyといったクライアントライブラリを使用）
まるごと消すのであれば、delete_vhostでvhostごと消せば可能


## コネクション

### コネクション一覧
```
$ sudo /usr/sbin/rabbitmqctl list_connections
```

```text:実行結果
Listing connections ...
user1        10.xx.xx.xx     47310   running
user1        10.xx.xx.xx     47311   running
user1        10.xx.xx.xx     47312   running
```
* 左から、接続ユーザ名、接続元ホスト、プロセスID、ステータス

### コネクション削除

コネクション削除にはコネクションのpid(LinuxのPIDとは別物）が必要なので、まずはpidを取得する
```
$ sudo /usr/sbin/rabbitmqctl list_connections pid
```

```text:実行結果
Listing connections ...
<rabbit@hostname.2.22101.7>
<rabbit@hostname.2.22108.7>
<rabbit@hostname.2.22115.7>
```

取得したpidを指定して、`close_connection`を実行する
```
$ sudo /usr/sbin/rabbitmqctl close_connection <pid> <comment>
```

```text:例
$ sudo /usr/sbin/rabbitmqctl close_connection "<rabbit@hostname.2.22101.7>" "close"
```
* `<comment>`は何でも良いが、指定しないと削除できない