Citrix ADC

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

有些协议在TCP字节流中传输名称-值对。本例中TCP字节流中的协议是FIX (Financial Information eXchange)协议。在非xml实现中,FIX协议使通过网络通信的两台主机能够以名称-值对列表(称为“FIX字段”)的形式交换业务或贸易相关信息。字段格式为<标记> = <价值> <分隔符>.这种传统的标记值格式使得FIX协议非常适合这个用例。

FIX字段中的标签是一个数字标识符,表示该字段的含义。在例子中;

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

以下是登录消息的示例。

8= fixe .4.1 9=61 35= a 56= brkr 34=1 52=20000426-12:05:06 98=0 108=30 10=157

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

假设虚拟服务器fixlb1正在负载平衡TCP连接到托管启用fix的应用程序实例的服务器群。您希望根据SenderCompID字段的值为连接配置持久性,该字段标识发送消息的公司。这个FIX字段的标记是49(如前面的登录消息示例所示)。

如果要配置负载均衡虚拟服务器的基于规则的持久化,则需要配置负载均衡虚拟服务器的持久化类型为rule,并使用表达式配置规则参数。表达式必须提取TCP有效负载的一部分,您希望在其中找到SenderCompID字段,根据分隔符将结果字符串类型转换为名称-值列表,然后提取SenderCompID字段的值(标记49),如下所示:

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

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

如果客户端发送包含前面的登录消息示例中的名称-值列表的FIX消息,则表达式将提取值INVMGR, Citrix ADC设备将基于该值创建一个持久会话。

PAYLOAD()函数的参数可以很大,只要您认为在函数提取的字符串中包含SenderCompID字段是必要的。如果希望设备在提取字段值时忽略大小写,还可以选择使用SET_TEXT_MODE(IGNORECASE)函数;如果希望设备在提取值时忽略大小写,还可以使用HASH函数基于提取值的散列创建持久性会话。下面的表达式使用了SET_TEXT_MODE(IGNORECASE)和HASH函数:

.TYPECAST_NVLIST_T CLIENT.TCP.PAYLOAD (500) ('=','^'). SET_TEXT_MODE (IGNORECASE) value .HASH(“49”)

下面是更多规则示例,您可以使用这些规则为FIX连接配置持久性<标记>使用要提取其值的字段的标签):

  • 要在TCP有效载荷的前300字节中提取任何FIX字段的值,您可以使用表达式CLIENT.TCP.PAYLOAD(300).BEFORE_STR(" ^ ").AFTER_STR("<标记>= ")。
  • 要提取偏移量为80的20字节长的字符串,将字符串强制转换为名称-值列表,然后提取所需字段的值,请使用表达式CLIENT.TCP.PAYLOAD(100).SUBSTR(80,20).TYPECAST_NVLIST_T(' = ', ' ^ ')。<标记>”)。
  • 要提取TCP有效负载的前100个字节,将字符串强制转换为名称-值列表,并提取所需字段的第三次出现的值,请使用表达式CLIENT.TCP.PAYLOAD(100).TYPECAST_NVLIST_T(' = ', ' ^ ')。<标记>”,2)。注意:如果传递给VALUE()函数的第二个参数是n,设备将提取(n+1)的值。<一口> th > < /晚餐字段的实例,因为计数从0(0)开始。

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

  • CLIENT.TCP.PAYLOAD (100)
  • .HASH CLIENT.TCP.PAYLOAD (100)
  • 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字节流中的名称-值对的基于规则的持久性

在本文中