# Retained Messages

EMQXの**Retained Messages**ページでは、すべての保持メッセージを確認できます。ユーザーが保持メッセージをパブリッシュすると、EMQXはこのメッセージをシステム内に保存します。ユーザーはRetained Messagesページでこのメッセージを確認でき、保持メッセージのトピックをサブスクライブすると、EMQXはそのメッセージをトピックにパブリッシュし、ユーザーは即座にメッセージを受信できます。保持メッセージは、ユーザーが手動で削除しない限り、デフォルトで期限切れになりません。

## Retained Messages List

Retained Messages Listには、現在システムに保存されているすべての保持メッセージが表示されます。リストにはトピック、QoSレベル、パブリッシャーのClient ID、保持メッセージがパブリッシュされた時間が含まれます。リスト内の**Show Payload**ボタンと**Delete**ボタンをクリックすることで、それぞれ保持メッセージのペイロードを確認したり、保持メッセージを削除したりできます。右上の**Refresh**ボタンをクリックすると現在の保持メッセージリストが更新され、**Settings**をクリックすると保持メッセージ設定ページに遷移します。

EMQXはデフォルトで3つのシステムトピックのメッセージを保持します。クラスター環境では、異なるシステムトピックの保持メッセージはノード名に基づいて保存されます。

- $SYS/brokers/+/sysdescr: 現在のEMQXノードのシステム説明。
- $SYS/brokers/+/version: 現在のEMQXノードのバージョン番号。
- $SYS/brokers: 現在のEMQXクラスター内のすべてのノードの数と名前。

![image](./assets/retained-messages.png)

### Delete Retained Message

通常、クライアントから保持メッセージのトピックに空のメッセージをパブリッシュすることで保持メッセージを削除できます。この方法に加え、保持メッセージリストの**Delete**ボタンをクリックして特定の保持メッセージを削除することも可能です。さらに、**Clear All**ボタンを使用してクラスター全体の保持メッセージを一括削除することもできます。保持メッセージの有効期限は保持メッセージ設定ページで設定でき、有効期限に達した保持メッセージはEMQXが自動的に削除します。

### View Payload

保持メッセージのペイロードを確認したい場合は、保持メッセージ項目の**Actions**列にある**Show Payload**をクリックしてください。

ポップアップウィンドウでは、右下の**Copy**ボタンをクリックしてペイロードをコピーできます。また、左下のドロップダウンリストからペイロードの表示形式を選択でき、JSONや16進数など特定のペイロード形式をより直感的に表示できます。

## Retainer Settings

**Retained Messages**ページ右上の**Settings**ボタンをクリックすると、**Management** -> **MQTT Settings**ページの**Retainer**タブに遷移します。ここで保持メッセージ機能の有効／無効を切り替えたり、保持メッセージの設定を行えます。

::: tip

保持メッセージ機能をトグルスイッチで無効にすると、Retained Messagesページに**Enable**ボタンが表示されます。このボタンをクリックすると、**Retainer**タブに遷移します。

:::

<img src="./assets/mqtt-settings-retainer.png" alt="mqtt-settings-retainer" style="zoom:50%;" />

以下は各項目の詳細説明です。

| 設定項目                | タイプ     | オプション値        | デフォルト値   | 説明                                                         |
| ----------------------- | ---------- | ------------------- | -------------- | ------------------------------------------------------------ |
| Storage Type            | -          | Built-in Database   | -              | -                                                            |
| Storage Method          | Enum       | `ram`, `disc`       | `ram`          | `ram`: メモリのみ保存<br />`disc`: メモリとハードディスクに保存。 |
| Max Retained Messages   | Integer    | ≥ 0                 | 0 (無制限)     | 0は無制限。<br />最大保持メッセージ数を設定すると、上限に達した際に既存のメッセージが置き換えられます。ただし新しいトピックの保持メッセージは上限を超えて保存できません。 |
| Max Payload Size        | Bytesize   |                     | 1MB            | メッセージの最大ペイロードサイズ。超過した場合、EMQXは保持メッセージではなく通常メッセージとして扱います。 |
| Message Expire Interval | Duration   |                     | 期限切れなし   | 保持メッセージの有効期限。0は期限切れなし。PUBLISHパケットにメッセージ有効期限が設定されている場合は、そちらが優先されます。 |
| Message Clear Interval  | Duration   |                     | 無効           | 期限切れメッセージをクリーンアップする間隔。                      |
| Max Publish Rate        | Integer    | ≥ 0                 | 2000           | 保持メッセージのパブリッシュ最大レート。上限を超えたメッセージは配信されますが保持されません。 |
| Deliver Rate            | Integer    | ≥ 0                 | 1000           | 保持メッセージの配信最大レート。                                   |
