2010-01-05 4 views
3

J'ai une application d'entreprise avec environ 2 000 utilisateurs simultanés chaque jour. Ces utilisateurs gèrent les appels des clients, de sorte que la vitesse de l'application est d'une importance vitale. Lorsqu'un utilisateur termine un appel, il valide toutes les informations qu'il a capturées. Ce commit peut durer de 10 à 45 secondes.Comment implémenter le traitement asynchrone avec l'application J2EE

Je suis à la recherche de moyens pour éloigner le retard de l'utilisateur.

Nous avons une interface web fonctionnant en I.E. le backend est lourd Java fonctionnant sur un seul EJB.

Je voulais que ce processus de validation soit asynchrone car une fois que l'utilisateur a soumis la requête, il n'a pas besoin d'attendre que la validation se termine avant de passer au client suivant. C'est ce qui est actuellement mis en œuvre. A l'origine, je pensais juste lancer un autre thread pour gérer le commit, mais c'est un non non avec les EJB.

D'autres options que je peux penser emploieraient JMS ou SIB,

Quelle serait la meilleure solution soit? Y a-t-il une autre alternative qui me manque?

+2

J'irais probablement JMS. Il vous donne l'exigence asynchrone, il est convivial JEE, il vous permet d'évoluer et il peut fournir une bonne fiabilité. L'utilisation d'un SIB est plus sur le fait d'avoir un protocole plus interopérable que RMI. –

Répondre

7

Il existe actuellement deux alternatives pour les cas de ce genre.

  • Le premier sera d'utiliser JMS. Il a l'avantage que le serveur fournit toute l'infrastructure requise et que vous n'avez pas à vous implémenter vous-même.
  • Une autre méthode consiste à enregistrer la demande dans une base de données et d'avoir un événement planifié pour tous les traiter.

Ce que vous sélectionnez dépend de vos besoins. Si vous devez répondre aux demandes dès leur arrivée, vous devez utiliser JMS. Dans les deux cas, vous devez conserver le résultat de la requête dans une base de données et concevoir un service Web en haut de celle-ci. L'extrémité avant pourrait utiliser ceci (par pollling) pour présenter le résultat à l'utilisateur.

2

J'aurais aimé laisser un commentaire, mais je n'en ai pas la possibilité.

Une autre possibilité:

Envelopper les années EJB lourds dans un mécanisme de file d'attente, et d'exposer un grain différent avec la même API afin que vos communications avec les clients parler au nouveau haricot et sont rapides. Ils acceptent la demande, ajoutent le travail à la file d'attente et retournent immédiatement au client. Vous n'avez pas besoin de changer le lourd EJB ou les communications client, juste mettre un médiateur dans le chemin, et ajouter une couche d'emballage.

Questions connexes