ADC

用例 2:基于 TCP 字节流中的名称-值对配置基于规则的持久性

有些协议在 TCP 字节流中传输名称-值对。此示例中 TCP 字节流中的协议是财务信息交换 (FIX) 协议。在非 XML 实施中,FIX 协议允许两台主机通过网络进行通信,以名称值对列表(称为“FIX 字段”)的形式交换业务或贸易相关信息。字段格式为<tag>=<value><delimiter>。这种传统的标签值格式使得 FIX 协议非常适合用例。

FIX 字段中的标签是指示字段含义的数字标识符。在这个例子中;

  • 标签 35 表示消息类型。
  • 等号后面的值具有给定标签的特定含义,并与数据类型相关联。标记 35 的值 A 表示该消息是登录消息。
  • 分隔符是非打印的“标题开始”(SOH) ASCII 字符 (0x01),它是插入符号 (^)。
  • 还为每个字段分配一个名称。标签为 35 的字段是 MSGType 字段。

以下是登录消息的示例。

8=FIX.4.1 9=61 35=A 49=INVMGR 56=BRKR 34=1 52= 2000426-12:05:06 98=0 108=30 10=157

您为标签值列表(如上所示)选择的持久性类型取决于可用于从列表中提取特定字符串的选项。基于令牌的持久性方法要求您指定要从负载中提取的令牌的偏移量和长度。FIX 协议不允许您这样做,因为给定字段的偏移量及其值的长度可能因消息而异。此变化取决于消息类型、前面的字段以及前面值的长度。它还根据实现的不同而有所不同,具体取决于是否定义了自定义字段。这种变化使得无法预测给定字段的确切偏移量或指定要提取的值作为令牌的长度。因此,在这种情况下,基于规则的持久性是首选的持久性类型。

假设虚拟服务器 fixlb1 负载平衡与托管启用了修复的应用程序实例的服务器场的 TCP 连接。您希望根据 SenderCompID 字段的值为连接配置持久性,该字段标识发送消息的公司。此 FIX 字段的标记为 49(在前面的登录消息示例中显示)。

要为负载平衡虚拟服务器配置基于规则的持久性,请将负载平衡虚拟服务器的持久性类型设置为 RULE,然后使用表达式配置规则参数。该表达式必须是提取 TCP 负载中您希望找到 senderCompid 字段的部分,根据分隔符将生成的字符串类型转换为名称值列表,然后提取 senderCompID 字段(标记 49)的值,如下所示:

set lb vserver fixlb1 -persistenceType RULE -rule "CLIENT.TCP.PAYLOAD(300).TYPECAST_NVLIST_T('=','^').VALUE("\49\")"

注意:表达式中使用了反斜杠字符,因为这是一个 CLI 命令。如果您使用配置实用程序,请勿输入反斜线字符。

如果客户端发送包含先前登录消息示例中的名称/值列表的 FIX 消息,则表达式提取值 INVMGR,然后 NetScaler 设备会根据该值创建持久会话。

有效载荷 () 函数的参数可以与您认为需要的一样大,以便在函数提取的字符串中包含 SenderCompID 字段。或者,如果希望设备在提取字段值时忽略大小写,则可以使用 SET_TEXT_MODE (IGNORASE) 函数,也可以使用哈希函数根据提取值的哈希值创建持久性会话。以下表达式使用 SET_TEXT_MODE(IGNORECASE) 和 HASH 函数:

CLIENT.TCP.PAYLOAD(500).TYPECAST_NVLIST_T('=','^').SET_TEXT_MODE(IGNORECASE).VALUE("49").HASH

以下是可用于为 FIX 连接配置持久性的更多规则示例( <tag> 替换为要提取其值的字段的标签):

  • 要提取 TCP 负载前 300 字节中任何 FIX 字段的值,可以使用表达式 CLIENT.TCP.PAYLOAD(300).BEFORE_STR(“^”).AFTER_STR(“<tag>=”)。
  • 要在偏移量 80 处提取长度为 20 字节的字符串,请将该字符串转换为名称值列表,然后提取所需字段的值,请使用表达式 CLIENT.TCP.PAYLOAD(100).SUBSTR(80,20).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>”)。
  • 要提取 TCP 负载的前 100 个字节,将字符串转换为名称值列表,然后提取第三次出现所需字段的值,请使用表达式 CLIENT.TCP.PAYLOAD(100).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>“,2)。 注意:如果传递给 VALUE () 函数的 第二个参数是 n,则设备会提取该字段的 (n+1) <sup>th</sup> 实例的值,因为计数从零 ( 0) 开始。

以下是可用于配置持久性的更多规则示例。只有基于有效载荷的表达式才能评估通过 FIX 协议传输的数据。其他表达式是更通用的表达式,用于基于较低的网络协议配置持久性。

  • CLIENT.TCP.PAYLOAD(100)
  • CLIENT.TCP.PAYLOAD(100).HASH
  • CLIENT.TCP.PAYLOAD (100) .SUBSTR (5,10)
  • CLIENT.TCP.SRCPORT
  • CLIENT.TCP.DSTPORT
  • CLIENT.IP.SRC
  • CLIENT.IP.DST
  • CLIENT.IP.SRC.GET4
  • CLIENT.IP.DST.GET4
  • CLIENT.ETHER.SRCMAC.GET6
  • CLIENT.ETHER.DSTMAC.GET5
  • CLIENT.VLAN.ID
用例 2:基于 TCP 字节流中的名称-值对配置基于规则的持久性

在本文中