> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/dev/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/dev/llms-full.txt.

# RabbitMQ

UCIDM は API サーバーで受け取った ID 連携の情報を [RabbitMQ](https://www.rabbitmq.com/) を経由して複数の外部連携先に送ります。

## Docker Compose の設定 \{#docker-compose-settings}

RabbitMQ はコンテナとして稼働させます。次のように `compose.yml` に設定します。

```yml
  rabbitmq:
    container_name: rabbitmq
    hostname: rabbitmq
    image: docker.io/library/rabbitmq:4.2.5-management
    logging: *default-logging
    environment:
      RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}"
      RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASSWORD}"
    ports:
      - 127.0.0.1:15672:15672
    volumes:
      - type: bind
        source: ./rabbitmq/rabbitmq.conf
        target: /etc/rabbitmq/rabbitmq.conf
        read_only: true
        bind:
          create_host_path: false
      - type: bind
        source: ./rabbitmq-data
        target: /var/lib/rabbitmq
        bind:
          create_host_path: true
    restart: "always"
    healthcheck:
      test: rabbitmq-diagnostics -q ping
      interval: 60s
      timeout: 5s
      retries: 3
      start_period: 30s
      start_interval: 5s
```

ここで参照する環境変数は `.env` に設定します。

## 環境変数の設定 \{#environment-variables}

| 環境変数                  |  値  | 説明                        |
| :-------------------- | :-: | :------------------------ |
| RABBITMQ_DEFAULT_USER |  任意 | 初期化時に作成する RabbitMQ のユーザ名  |
| RABBITMQ_DEFAULT_PASS |  任意 | 初期化時に作成する RabbitMQ のパスワード |

## RabbitMQ の管理 \{#rabbitmq-management}

RabbitMQ サービスを起動した後の _Exchange_ や _Queue_ を管理するための機能を紹介します。UCIDM API サーバーが起動するときに自動的に初期設定は行うため、とくに管理のための設定を行う必要はありません。しかし、メッセージング機能のカスタマイズやトラブルシューティングのときにこれらの管理機能を使うと便利です。

### mqadmin を使う \{#using-mqadmin}

環境変数を誤って書き換えてしまわないよう、Docker Compose を操作している端末とは別の端末で作業することをお奨めします。環境変数を設定するサンプルファイルをコピーして編集します。

```bash
$ cp /opt/osstech/share/ucidm/exports-mqadmin.sh .
$ vi exports-mqadmin.sh
```

RabbitMQ に接続するための環境変数を設定します。

```bash
# rabbitmq の接続設定
export RABBITMQ_USER="${ユーザー}"
export RABBITMQ_PASSWORD="${パスワード}"
export RABBITMQ_HOST="localhost:5672"

# rabbitmq の management plugin のポート番号
export MQADMIN_PORT=15672
```

設定した環境変数を source コマンドで読み込みます。

```bash
$ source exports-mqadmin.sh
```

_Exchange_ の情報を取得してみましょう。次のように表示されれば成功です。

```bash
$ /opt/osstech/bin/mqadmin get-exchange -name ucidm
time=2023-04-22T06:31:47.693Z level=INFO msg="got the given exchange" name=ucidm
{
  "name": "ucidm",
  "vhost": "/",
  "type": "direct",
  "durable": true,
  "auto_delete": false,
  "internal": false,
  "arguments": {},
  "incoming": [],
  "outgoing": [],
  "message_stats": {},
  "bindings": [
    {
      "source": "ucidm",
      "vhost": "/",
      "destination": "local-001",
      "destination_type": "queue",
      "routing_key": "local-001",
      "arguments": {},
      "properties_key": "local-001"
    }
  ]
}
```

これらの環境変数を削除するには次のように実行します。

```bash
$ unset RABBITMQ_USER RABBITMQ_PASSWORD RABBITMQ_HOST MQADMIN_PORT
```

### RabbitMQ の管理画面を使う \{#rabbitmq-management-ui}

localhost:15672 にアクセスします (ここでは接続先を localhost として説明しますが、適宜、お客様の環境にあわせてください) 。次のように管理画面へのログインページが表示されます。

![](/resource/ucidm/docs/on-premise/static/image/rabbitmq-admin-login1.3eab9944bc.png)
前節の環境変数で設定したユーザー名とパスワードを使ってログインします。
