ADC

MQTT 对响应程序的支持

响应程序功能支持 MQTT 协议。您可以配置响应程序策略以根据传入的 MQTT 消息中的参数执行操作。

该操作使用以下任一方式对新连接做出响应:

  • DROP
  • RESET
  • NOOP
  • 用于启动新的 MQTT CONNACK 响应的响应程序操作。

为 MQTT 配置响应程序策略

启用响应程序功能后,必须配置一个或多个操作来处理 MQTT 请求。然后,配置响应者策略。您可以全局绑定响应程序策略,也可以绑定到特定的负载平衡虚拟服务器或内容交换虚拟服务器。

以下绑定点可用于在全球范围内绑定响应者策略:

  • MQTT_REQ_DEFAULT
  • MQTT_REQ_OVERRIDE
  • MQTT_JUMBO_REQ_DEFAULT
  • MQTT_JUMBO_REQ_OVERRIDE

以下绑定点可用于将响应程序策略绑定到内容交换或负载平衡虚拟服务器:

  • 请求
  • MQTT_JUMBO_REQ(此绑定点仅用于巨型数据包)

将响应程序配置为使用 CLI 响应 MQTT 请求

在命令提示符下,键入以下命令:

配置响应者操作。

add responder action <actName> <actType>
<!--NeedCopy-->
  • 对于 actname,用一个名称代替您的新操作。名称长度可以为 1—127 个字符,可以包含字母、数字、连字符 (-) 和下划线 (_) 符号。
  • 替换为 actType响应者操作类型 respondwith。

示例:

add responder action mqtt_connack_unsup_ver respondwith MQTT.NEW_CONNACK(132)
<!--NeedCopy-->

配置响应者策略。NetScaler 设备会响应此响应程序策略选择的 MQTT 请求。

add responder policy <polName> <rule> <actname>
<!--NeedCopy-->
  • 对于 polname,用新保单的名称代替。
  • 替换为 actname您创建的操作的名称。

示例:

add responder policy reject_lower_version "MQTT.HEADER.COMMAND.EQ(CONNECT) && MQTT.VERSION.LT(3)" mqtt_connack_unsup_ver
<!--NeedCopy-->

将响应程序策略绑定到特定的负载平衡虚拟服务器或内容交换虚拟服务器。该策略仅适用于其目标 IP 地址为该虚拟服务器的 VIP 的 MQTT 请求。

bind lb vserver <name> -policyName <policy_name> -priority <priority>

bind cs vserver <name> -policyName <policy_name> -priority <priority>
<!--NeedCopy-->
  • 替换为 policy_name已创建的策略的名称。
  • 对于 priority,指定策略的优先级。

示例:

bind lb vserver lb1 -policyName reject_lower_version -priority 50

bind cs vserver mqtt_frontend_cs -policyName reject_lower_version -priority 5
<!--NeedCopy-->

用例 1:根据用户名或客户端 ID 筛选客户端

管理员可以配置 MQTT 响应程序策略,根据 MQTT CONNECT 消息中的用户名或客户端 ID 拒绝连接。

基于客户端 ID 筛选客户端的示例配置

add policy patset filter_clients
bind policy patset filter_clients client1

add responder action mqtt_connack_invalid_client respondwith MQTT.NEW_CONNACK(2)

add responder policy reject_clients "MQTT.HEADER.COMMAND.EQ(CONNECT) && mqtt.connect.clientid.equals_any("filter_clients")" mqtt_connack_invalid_client

bind cs vserver mqtt_frontend_cs -policyName reject_clients -priority 5
<!--NeedCopy-->

用例 2:限制 MQTT 消息的最大消息长度以处理巨型数据包

管理员可以配置 MQTT 响应程序策略,在消息长度超过特定阈值时断开客户端连接,或者根据要求采取必要的操作。

要处理巨型数据包,将具有以下任意规则模式的响应程序策略绑定到巨型绑定点:

  • MQTT.MESSAGE_LENGTH
  • MQTT.COMMAND
  • MQTT.FROM_CLIENT
  • MQTT.FROM_SERVER

绑定到巨型绑定点的策略仅针对巨型数据包进行评估。

限制 MQTT 消息最大消息长度的示例配置

set lb parameter -dropmqttjumbomessage no

add responder policy drop_large_message MQTT.MESSAGE_LENGTH.GT(100000) reset

bind cs vserver mqtt_frontend_cs -policyName drop_large_message -priority 10
<!--NeedCopy-->

在此示例中, dropmqttjumbomessage 参数设置为 NO。因此,ADC 设备处理长度大于 64,000 字节且小于 1,000,000 字节的消息。长度大于 1,000,000 字节的消息将被重置。

MQTT 对响应程序的支持