Exemple: Fractionnement d'un fichier texte avec un délimiteur d'expression régulière et inclusion du délimiteur dans les messages

Transférez un fichier texte unique dans plusieurs messages en fractionnant le fichier à chaque correspondance d'une expression régulière Java donnée et incluez la correspondance d'expression régulière dans les messages résultants. Pour ce faire, utilisez les paramètres -dqdt et -qi de la commande fteCreateTransfer .

A propos de cette tâche

Transférez un fichier texte unique vers plusieurs messages d'une file d'attente. Le fichier est divisé en sections de longueur variable, dont chacune est écrite dans un message individuel. Le fichier texte est fractionné à chaque point où le texte du fichier correspond à une expression régulière donnée. Le fichier source est appelé /tmp/customers.text et a le contenu suivant:
Customer name: John Smith
Customer contact details: john@example.net
Customer number: 314

Customer name: Jane Brown
Customer contact details: jane@example.com
Customer number: 42

Customer name: James Jones
Customer contact details: jjones@example.net
Customer number: 26
L'expression régulière qui indique où scinder le fichier est Customer\snumber:\s\d+, qui correspond au texte Customer number: suivi de n'importe quel nombre de chiffres. Les expressions régulières spécifiées sur la ligne de commande doivent être placées entre guillemets pour empêcher le shell de commandes d'évaluer l'expression régulière. L'expression régulière est évaluée en tant qu'expression régulière Java . Pour plus d'informations, voir Expressions régulières utilisées par MFT.

Par défaut, le nombre de caractères pouvant correspondre à une expression régulière est défini sur cinq. L'expression régulière utilisée dans cet exemple correspond à des chaînes de plus de cinq caractères. Pour activer les correspondances de plus de cinq caractères, éditez le fichier de propriétés de l'agent pour inclure la propriété maxDelimiterMatchLength.

Par défaut, le texte qui correspond à l'expression régulière n'est pas inclus dans les messages. Pour inclure le texte qui correspond à l'expression régulière dans les messages, comme dans cet exemple, utilisez le paramètre -qi . Le fichier source se trouve sur le même système que l'agent source AGENT_NEPTUNE, qui se connecte au gestionnaire de files d'attente QM_NEPTUNE. La file d'attente de destination, RECEIVING_QUEUE, se trouve sur le gestionnaire de files d'attente QM_MERCURY. QM_MERCURY est également le gestionnaire de files d'attente utilisé par l'agent de destination AGENT_MERCURY. Le transfert fractionne le fichier source en sections et écrit chacune de ces sections dans un message sur RECEIVING_QUEUE.

Procédure

  1. Arrêtez l'agent de destination à l'aide de la commande suivante:
    fteStopAgent AGENT_MERCURY
  2. Ajoutez la ligne suivante au fichier de propriétés de l'agent pour AGENT_MERCURY:
    maxDelimiterMatchLength=25
    Remarque: L'augmentation de la valeur de maxDelimiterMatchLength peut réduire les performances.
  3. Démarrez l'agent cible à l'aide de la commande suivante:
    fteStartAgent AGENT_MERCURY
  4. Entrez la commande suivante :
    fteCreateTransfer -sa AGENT_NEPTUNE -sm QM_NEPTUNE -da AGENT_MERCURY -dm QM_MERCURY 
     -dq RECEIVING_QUEUE
         text -dqdt "Customer\snumber:\s\d+" -qi -dqdp postfix /tmp/customers.text
    L'agent source, AGENT_NEPTUNE, lit les données du fichier /tmp/customers.text et les transfère à l'agent cible, AGENT_MERCURY. L'agent de destination, AGENT_MERCURY, écrit les données dans trois messages persistants de la file d'attente RECEIVING_QUEUE. Ces messages ont tous le même identifiant de groupe " IBM® MQ et le dernier message du groupe a l'indicateur LAST_MSG_IN_GROUP " IBM MQ
    Les données des messages sont les suivantes.
    • Premier message:
      Customer name: John Smith
      Customer contact details: john@example.net
      Customer number: 314
      
    • Deuxième message:
      Customer name: Jane Brown
      Customer contact details: jane@example.com
      Customer number: 42
      
    • Troisième message:
      Customer name: James Jones
      Customer contact details: jjones@example.net
      Customer number: 26