<!-- review: finished -->

<a id="stream-mqtt-preread"></a>

# MQTT Preread

启用从消息队列遥测传输（MQTT）版本的 `CONNECT` 数据包中提取客户端 ID 和用户名
[3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718028)
和
[5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901033)。

当从源代码 [构建](https://cn.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild) 时，
该模块必须通过 `--with-stream_mqtt_preread_module`
[构建参数](https://cn.angie.software//angie/docs/installation/sourcebuild.md#configure) 启用。
在来自 [我们的仓库](https://cn.angie.software//angie/docs/installation/index.md#install-packages) 的软件包和镜像中，
该模块已包含在构建中。

<a id="configuration-example-63"></a>

## 配置示例

<a id="choosing-a-server-in-a-group-by-client-id"></a>

### 通过客户端 ID 选择组中的服务器：

```nginx
stream {

    mqtt_preread on;

    upstream mqtt {
        hash $mqtt_preread_clientid;
        # ...
    }
}
```

<a id="directives-72"></a>

## 指令

<a id="index-0"></a>

<a id="s-mqtt-preread"></a>

### mqtt_preread

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mqtt_preread` `on` | `off`;   |
|--------------------------------------------------------------------------------------|--------------------------------|
| 默认                                                                                   | `mqtt_preread off;`            |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream, server                 |

控制在 [预读阶段](https://cn.angie.software//angie/docs/configuration/processing.md#stream-sessions) 从 `CONNECT` 数据包中提取信息。
如果参数启用（`on`），
将在指定的上下文中填充下面列出的变量。

<a id="built-in-variables-20"></a>

## 内置变量

有关值语义的详细描述，
请参阅 MQTT 协议规范版本
[3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718031)
和 [5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901033)。

<a id="v-mqtt-preread-clientid"></a>

### `$mqtt_preread_clientid`

唯一客户端标识符。

<a id="v-mqtt-preread-username"></a>

### `$mqtt_preread_username`

可选用户名。
