Anwendungsfall 2: Konfigurieren der regelbasierten Persistenz basierend auf einem Name-Wert-Paar in einem TCP-Byte-Stream

Einige Protokolle übertragen Name-Wert-Paare in einem TCP-Byte-Stream. Das Protokoll im TCP-Bytestream in diesem Beispiel ist das FIX-Protokoll (Financial Information eXchange). In der traditionellen, nicht-XML-Implementierung ermöglicht das FIX-Protokoll zwei Hosts, die über ein Netzwerk kommunizieren, um geschäftliche oder handelsbezogene Informationen als Liste von Name-Wert-Paaren (sogenannte FIX-Felder) auszutauschen. Das Feldformat ist<tag>=<value><delimiter>. Dieses traditionelle Tag-Wert-Format macht das FIX-Protokoll ideal für den Anwendungsfall.

Das Tag in einem FIX-Feld ist ein numerischer Bezeichner, der die Bedeutung des Feldes angibt. Beispielsweise gibt das Tag 35 den Nachrichtentyp an. Der Wert nach dem Gleichheitszeichen hat eine bestimmte Bedeutung für das angegebene Tag und ist einem Datentyp zugeordnet. Ein Wert von A für das Tag 35 gibt beispielsweise an, dass es sich bei der Nachricht um eine Anmeldemeldung handelt. Das Trennzeichen ist das nicht druckende Start of Header (SOH) ASCII-Zeichen (0x01), welches das Caret-Symbol (^) ist. Jedem Feld wird außerdem ein Name zugewiesen. Beispielsweise ist das Feld mit Tag 35 das Feld MsgType. Es folgt ein Beispiel für eine Anmeldemeldung.

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

Ihre Wahl des Persistenztyps für eine Tag-Werteliste wie die oben dargestellte wird durch die Optionen bestimmt, die Ihnen zur Verfügung stehen, um eine bestimmte Zeichenfolge aus der Liste zu extrahieren. Token-basierte Persistenzmethoden erfordern, dass Sie den Offset und die Länge des Tokens angeben, das Sie aus der Nutzlast extrahieren möchten. Das FIX-Protokoll erlaubt dies nicht, da der Offset eines bestimmten Feldes und die Länge seines Wertes von einer Nachricht zu einer anderen variieren kann (abhängig vom Nachrichtentyp, den vorhergehenden Feldern und den Längen der vorhergehenden Werte) und von einer Implementierung zur anderen (je nachdem, ob benutzerdefinierte -Felder definiert wurden). Solche Variationen machen es unmöglich, den exakten Versatz eines bestimmten Feldes vorherzusagen oder die Länge des Wertes anzugeben, der als Token extrahiert werden soll. In diesem Fall ist die regelbasierte Persistenz der bevorzugte Persistenztyp.

Angenommen, ein virtueller Server fixlb1 Lastenausgleich TCP-Verbindungen zu einer Farm von Servern, die Instanzen einer fix-fähigen Anwendung hostet, und dass Sie Persistenz für Verbindungen auf der Grundlage des Wertes des Feldes SenderCompid konfigurieren möchten, das die Firma identifiziert, die die Nachricht sendet. Das Tag für dieses FIX-Feld ist 49 (im Beispiel der früheren Anmeldemeldung angezeigt).

Um die regelbasierte Persistenz für den virtuellen Lastausgleichsserver zu konfigurieren, legen Sie den Persistenztyp für den virtuellen Lastausgleichsserver auf RULE fest, und konfigurieren Sie den Regelparameter mit einem Ausdruck. Der Ausdruck muss ein Ausdruck sein, der den Teil der TCP-Nutzlast extrahiert, in dem Sie das Feld SenderCompid finden möchten, die resultierende Zeichenfolge in eine Name-Wert-Liste basierend auf den Trennzeichen eingeben und dann den Wert des Feldes SenderCompid (Tag 49) extrahiert:

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

Hinweis: Backslash Zeichen wurden im Ausdruck verwendet, da es sich um einen CLI-Befehl handelt. Wenn Sie das Konfigurationsprogramm verwenden, geben Sie die umgekehrten Schrägstriche nicht ein.

Wenn der Client eine FIX-Nachricht sendet, die die Name-Wert-Liste im Beispiel einer früheren Anmeldemeldung enthält, extrahiert der Ausdruck den Wert INVMGR, und die Citrix ADC Appliance erstellt eine Persistenzsitzung basierend auf diesem Wert.

Das Argument für die Funktion PAYLOAD () kann so groß sein, wie Sie es für notwendig halten, um das Feld SenderCompid in die von der Funktion extrahierte Zeichenfolge aufzunehmen. Optional können Sie die Funktion SET_TEXT_MODE (IGNORECASE) verwenden, wenn die Appliance die Groß-/Kleinschreibung beim Extrahieren des Feldwerts ignorieren soll, und die HASH-Funktion, um eine Persistenzsitzung basierend auf einem Hash des extrahierten Werts zu erstellen. Der folgende Ausdruck verwendet die Funktionen SET_TEXT_MODE (IGNORECASE) und HASH:

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

Im Folgenden finden Sie weitere Beispiele für Regeln, die Sie zum Konfigurieren der Persistenz für FIX-Verbindungen verwenden können (<tag> ersetzen Sie durch das Tag des Feldes, dessen Wert Sie extrahieren möchten):

  • Um den Wert eines beliebigen FIX-Felds in den ersten 300 Bytes der TCP-Nutzlast zu extrahieren, können Sie den Ausdruck CLIENT.TCP.PAYLOAD (300) .BEFORE_STR (^) .AFTER_STR (<tag>=) verwenden.
  • Um eine Zeichenfolgen zu extrahieren, die 20 Byte lang ist und einen Offset von 80 hat, wandeln Sie die Zeichenfolge in eine name-value List um und extrahieren dann den Wert des gewünschten Felds. Verwenden Sie den Ausdruck CLIENT.TCP.PAYLOAD(100).SUBSTR(80,20).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>”).
  • Verwenden Sie den Ausdruck CLIENT.TCP.PAYLOAD (100) .TYPECAST_NVLIST_T (‘=’, ‘^’) .VALUE (<tag>,2), um die ersten 100 Bytes der TCP-Nutzlast zu extrahieren. Hinweis: Wenn das zweite Argument, das an die Funktion VALUE () übergeben wird, n ist, extrahiert die Appliance den Wert der (n+1) <sup>th</sup> Instanz des Feldes, da die Anzahl bei Null beginnt ( 0).

Im Folgenden finden Sie weitere Beispiele für Regeln, die Sie zum Konfigurieren der Persistenz verwenden können. Nur die nutzlastbasierten Ausdrücke können Daten auswerten, die über das FIX-Protokoll übertragen werden. Die anderen Ausdrücke sind allgemeinere Ausdrücke für die Konfiguration der Persistenz basierend auf niedrigeren Netzwerkprotokollen.

  • 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

Anwendungsfall 2: Konfigurieren der regelbasierten Persistenz basierend auf einem Name-Wert-Paar in einem TCP-Byte-Stream