Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 987
    Points : 6 066
    Points
    6 066

    Par défaut [Camel] Méthode wireTap dépréciée

    Bonjour.

    j'ai une route camel dans laquelle j'ai
    Code :
    1
    2
    interceptFrom()
    .wireTap("jms:journal", true, constant(""))
    Or cette méthode est dépréciée.
    Dans la doc Camel rien n'est dit sur le fait qu'elle soit dépréciée.

    Dans le code source, seul le fait qu'elle soit dépréciée est indiqué avec le fait qu'elle disparaît en version 3.

    Je ne trouve pas de solution de remplacement.
    Si je fais
    Code :
    1
    2
    3
    4
    5
    6
    interceptFrom()
    .wireTap("direct:journal");
     
    from("direct:journal")
    .setBody("")
    .to("jms:journal");
    je crée un cycle infernal
    le est intercepté par l'intercepteur qui crée une copie qu'il envoie sur le même from.

    Je ne peux pas utiliser un broadcast vu que je suis dans un intercepteur je ne connais pas l'élément suivant.

    Et si je fais
    Code :
    1
    2
    interceptFrom()
    .wireTap("jms:journal")
    j'envoie dans mon journal tous les messages avec leur body et chez moi l'unité pour compter les échanges et le million. Intercepter les messages pour analyser les leaders afin d'avoir un suivi de l'activité a posteriori est jouable. Mais intercepter les messages entiers va inévitablement saturer la file du jms du journal.

    Si quelqu'un a une solution ou une piste je suis preneur.

    Merci de votre aide

  2. #2
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 987
    Points : 6 066
    Points
    6 066

    Par défaut

    bonjour à tous.
    avec un peu d'imagination je suis arrivé à la solution.

    mais e qui s'écrivait simplement devient très compliqué à écrire
    je l'ai dans une classe parente donc c'est pas trop lourd.

    fonctionnalité à reproduire
    Code java :
    1
    2
    interceptFrom()
        .wireTap("jms:journal", true, constant("")) // deprecated
    en clair envoyer une copie des headers dans des messages entrant de toutes les routes dans le journal.
    La solution
    Code :
    1
    2
    3
    4
    5
    6
    7
    interceptFrom()
        .when(header("identifiant.unique.journal").isNull())
            .setHeader("identifiant.unique.journal", constant("reception"))
    	.wireTap("direct:journal")
            .removeHeader("identifiant.unique.journal");
     
    from("direct:journal").setBody(constant("")).to("jms:journal");
    On intercept les message qui n'ont pas le header "identifiant.unique.journal"
    on leur met le header "identifiant.unique.journal"
    on fait une copie vers le chanel "direct:journal" et on leur retire le header "identifiant.unique.journal" pour que si une autre route récupère le message elle puisse l'intercepter à l'entrée.

    les message entrant dans "direct:journal" ayant l'entête il ne seront pas intercepté la route from("direct:journal") peut donc fonctionner sans créer de boucle.

    fort de ce principe j'ai mis en place ma journalisation dans la classe mère.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    interceptFrom()
      .when(header("identifiant.unique.journal").isNull())
        .setHeader("identifiant.unique.journal", constant("reception"))
        .wireTap("direct:journal")
        .removeHeader("identifiant.unique.journal")
        .bean(AphpMessageLogger.class, "traceDebutRoute")
    ;
     
    onCompletion()
      .onCompleteOnly()
        .choice()
          .when(header("identifiant.unique.journal").isNull())
          .setHeader("identifiant.unique.journal", constant("Echange OK"))
          .wireTap("direct:journal")
          .removeHeader("identifiant.unique.journal")
        .end()
    ;
    onCompletion()
      .onFailureOnly()
        .choice()
          .when(header("identifiant.unique.journal").isNull())
          .setHeader("identifiant.unique.journal", constant("Echange KO"))
          .wireTap("direct:journal")
          .removeHeader("identifiant.unique.journal")
        .end()
    ;
     
    // on envoie dans la file de journalisation uniquement les headers du messages.
    from("direct:journal").setBody(constant("")).to("jms:journal");
    A+JYT

  3. #3
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 987
    Points : 6 066
    Points
    6 066

    Par défaut

    Bonjour

    Je reviens sur ce post car à force de creuser la doc j'ai trouvé la bonne solution
    à la place de
    Code :
    1
    2
    interceptFrom()
        .wireTap("jms:journal", true, constant("")) // deprecated
    il faut faire
    Code :
    1
    2
    3
    4
    nterceptFrom()
        .wireTap("jms:journal")
            .newExchangeBody(constant(""))
        .end()
    A+JYT

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •