-
-
-
-
-
-
-
-
-
-
-
用例2:基于TCP字节流中的名值对配置基于规则的持久性
-
-
-
此内容已被机器动态翻译。
diesel Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde。(Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique。(非条款responsabilité)
Este artículo lo ha traducido una máquina形式上dinámica。(通报法律)
此内容已经过机器动态翻译。放弃
このコンテンは動的に機械翻訳されています。免責事項
이콘텐츠는동적으로기계번역되었습니다。책임부iot
Este texto foi traduzido automaticamente。(通报法律)
查询内容è自动贸易记录。(Esclusione di responsabilità))
这篇文章是机器翻译的。
柴油Artikel wurde maschinell übersetzt。(Haftungsausschluss)
Ce article a été traduit automatiquement。(非条款responsabilité)
Este artículo ha sido traducido automáticamente。(通报法律)
この記事は機械翻訳されています。免責事項
이기사는기계번역되었습니다。책임부iot
Este artigo foi traduzido automaticamente。(通报法律)
这篇文章已经过机器翻译.放弃
Questo articolo è自动转换。(Esclusione di responsabilità))
翻译失败!
用例2:基于TCP字节流中的名值对配置基于规则的持久性
有些协议在TCP字节流中传输名-值对。本例中TCP字节流中的协议是金融信息交换(FIX)协议。在非xml实现中,FIX协议允许通过网络通信的两台主机以名称-值对列表(称为“FIX字段”)的形式交换业务或与贸易相关的信息。字段格式为<标记> = <价值> <分隔符>
.这种传统的标记值格式使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=20000426-12:05:06 98=0 108=30 10=157
标记值列表(如上面所示)的持久性类型的选择是由从列表中提取特定字符串的可用选项决定的。基于令牌的持久性方法要求您指定希望从有效负载中提取的令牌的偏移量和长度。FIX协议不允许您这样做,因为给定字段的偏移量及其值的长度可能因消息的不同而不同。这种变化取决于消息类型、前面的字段和前面值的长度。它也会根据实现的不同而有所不同,这取决于是否定义了自定义字段。这样的变化使得无法预测给定字段的准确偏移量,也无法指定作为标记提取的值的长度。因此,在这种情况下,基于规则的持久性是首选的持久性类型。
假设虚拟服务器fixlb1正在负载平衡到一个服务器群的TCP连接,该服务器群承载了启用fix的应用程序的实例。您希望根据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, 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(' = ', ' ^ ').VALUE("
<标记>
”)。 - 要提取TCP有效负载的前100个字节,将字符串转换为名称-值列表,并提取所需字段的第三个出现的值,请使用表达式CLIENT.TCP.PAYLOAD(100).TYPECAST_NVLIST_T(' = ', ' ^ ').VALUE("
<标记>
”,2)。注意:如果传递给VALUE()函数的第二个参数是n,该工具将提取(n+1)的值<一口> th > < /晚餐
字段的实例,因为计数从零(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
分享
分享
在本文中
此预览版产品文档是Citrix机密文档。
您同意按照您的Citrix Beta/技术预览协议的条款对本文档进行保密。
预览文档中描述的任何特性或功能的开发、发布和时间仍由我们自行决定,如有更改,恕不另行通知或咨询。
本文档仅供参考之用,不构成提供任何材料、代码或功能的承诺、承诺或法律义务,不应作为思杰产品购买决策的依据。
如果不同意,选择“不同意退出”。