IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes réactives et architectures modulaires Java Discussion :

[Apache Camel] Gestion d'erreur d'un producer SFTP


Sujet :

Plateformes réactives et architectures modulaires Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 79
    Points : 89
    Points
    89
    Par défaut [Apache Camel] Gestion d'erreur d'un producer SFTP
    Bonjour,

    J'aimerais mettre en place une règle de gestion d'erreur du SFTP lors de tentatives infructueuses de connection.

    J'ai un From(File:....).To (Sftp:..........)

    quel serait la meilleur façon de faire afin de gérer les erreurs de connection.
    From(File) a un Delay de 1 Heure;
    lors d'un dépot d'un fichier, il est consommé (dans le timing du Delay) et est envoyé vers le To.

    Le sftp tente de se connecter au serveur à distance, et imaginons qu'il n'est pas joignable....une exception est levée.
    J'aurais voulu, qu'il tente 3 fois et puis qu'un mail soit envoyé à l'équipe technique. Puis ne fais plus rien. Mais dans 1 Heure le From va re-consommer le fichier ce qui est normal et re faire la tentative (ce qui est bien ce que je veux.).

    Tant qu'il n'a pas réussi à ce connecter le fichier ne doit pas être consommé.

    Mon souci, c'est juste le re-connect 3 fois puis mail, puis stop les tentatives de re-connection.


    avez vous des pistes ?
    je pensais a un PollerConsumerStrategy (mais est ce bon pour un Producer) ?

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    bonjour

    pour ce qui est de la gestion des erreur tu as onexception
    http://camel.apache.org/exception-clause.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    onException(IOException.class).maximumRedeliveries(3);
     
    onException(OrderFailedException.class).maximumRedeliveries(2);
    tu peux mettre autant de gestionnaire que d'exception que tu veux traité différemment.
    tu peux aussi redirigé le flux vers ce que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onException(FileNotFoundException.class).handled(true).to("log:nofile");
    je te conseille aussi de mettre en place le onCompletion
    http://camel.apache.org/oncompletion.html
    ce complément de route est invoqué lorsque la route est fini.

    personnellement toute mes route sont baties ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    from("direct:start")
        .interceptFrom()
            .to("log:message recu")
        .end()
        .onCompletion(). onCompleteOnly()
            .to("log:Route terminée")
            .to("mock:ok")
        .end()
        .onCompletion().onFailureOnly()
            .to("log:Route terminée avec erreur")
            .to("mock:ko")
        .end()
        .onException(FileNotFoundException.class).handled(true).to("log:nofile");
     
        // here the original route
        .process(new MyProcessor())
        .to("mock:result");
    mon intercept from ajoute des headers il génère un id unique en plus de celui de camel et trace l'arrivée de chaque message.

    le on completion complete only trace la remise du message
    le on exception et le onfailure tracent l'erreur et placent le message dans une file JMS d'erreur.

    ainsi il me sufit de déplacer le message de la file d'erreur vers une file d'entrée pour le rejouer.

    c'est la que l'ID généré entre en jeux l'intercept from ne regénère pas de nouvel id

    ainsi je peux suivre un message dans tous les échanges même s'il passe par plusieurs route ou s'il est rejoué plusieurs fois.

    j'ajoute aussi un header qui compte le nomdre de route traversée.
    cela permet à l'exploitant de savoir si on message à été rejouté pluisuers fois sans succés.

    pour généraliser la création des route (oncompletion onException interceptFrom)
    j'ai dérivé camel.RouteBuilder et toute mes routes utilisent de mon prorpre RouteBuilder.

    j'ai donc un système homogène.

    A+JYT

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 79
    Points : 89
    Points
    89
    Par défaut
    Bonjour sekaijin,

    très interessant, j'ai mis en pratique le OnException comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    from(file:toto&delay=1H&initialDelay=15000)
      .onException(GenericFileOperationFailedException.class)
           .process(errorMailProcessor)
           .setHeader("subject",constant(technicalSubject))
           .to(smtpTechnicalSupport)
           .log(LoggingLevel.INFO, "a technical email has been sent ...")
           .stop()
           .end()
      .routeId(routeID + ".Receiver")
      .setHeader("flowname", constant(routeID))
      .to(sftp://sdfsdfsdfsdfs?consumer.delay=10M);
    mais dès qu'il y a une erreur du coté SFTP (exemple serveur indisponible), je reçoit toujours toutes les +- 2 minutes le mail...

    aurais-je oublié quelque chose ? afin de n'avoir qu'un mail toutes les 1 heure de mon from ? voir 10 minutes de mon SFTP (peut être tentative de retry)


    En sachant que le SFTP une fois l'exception levée fait un rollback de mon fichier et le laisse dans le répertoire, chose normale (et dont je veux garder) comme ça 1 heure après il retente le même fichier.

    merci

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    regarde dans la doc du côté des maximumRedeliveries

    onException(IOException.class).maximumRedeliveries(3);

    A+JYT

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 79
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    regarde dans la doc du côté des maximumRedeliveries

    onException(IOException.class).maximumRedeliveries(3);

    A+JYT
    merci :-)

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

Discussions similaires

  1. [PHP 5.2] Gestion des erreurs avec Apache
    Par max-mag dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2010, 13h32
  2. Gestion des erreurs apache
    Par SpyesX dans le forum Apache
    Réponses: 3
    Dernier message: 04/03/2008, 15h31
  3. Apache et gestion des erreurs.
    Par benbax dans le forum Apache
    Réponses: 5
    Dernier message: 19/12/2007, 13h21
  4. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 23h20
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 23h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo