2011-04-25 4 views
1

J'utilise apache http client (version 3.0 car nous avons java 1.4 et ne peut pas le changer) dans l'application web. J'ai un composant (classe) qui est utilisé pour les requêtes POST sur le serveur, et ce composant est utilisé sur les pages JSP, c'est-à-dire à partir de différents threads.Comment configurer apache http client v3.0 pour application web (multithreading)

Je crée donc le client qu'une seule fois dans une méthode init() de ce composant:

HttpClient client = 
      new HttpClient(new MultiThreadedHttpConnectionManager()); 
    client.getHostConfiguration().setProxy(proxyHost, proxyPortInt.intValue()); 
    HttpState state = new HttpState(); 
    state.setProxyCredentials(new AuthScope(proxyHost, proxyPortInt.intValue()), 
      new UsernamePasswordCredentials(username, userpassword)); 
    client.setState(state); 

et ensuite l'utiliser dans la méthode qui peut être accès à plusieurs fils:

PostMethod method = new PostMethod(urlStr); 
method.setRequestEntity(new StringRequestEntity(requestStr)); 
method.setRequestHeader("Host", "the_same_host_every_time "); 
method.setRequestHeader("Content-Type", "application/soap+xml"); 
method.setRequestHeader("Content-Length", String.valueOf(requestStr.length())); 
InputStream responseStream = null; 
try { 
    int resultCode = client.executeMethod(method); 
    responseStream = method.getResponseBodyAsStream(); 
... 

Cette application fait des demandes au même hôte à chaque fois. MultiThreadedHttpConnectionManager a les propriétés suivantes:

  1. DEFAULT_MAX_HOST_CONNECTIONS Le nombre maximum par défaut de connexions par hôte (par section RFC 2616 8.1.4, par défaut cette valeur à 2.)
  2. de DEFAULT_MAX_TOTAL_CONNECTIONS Le nombre maximum par défaut de connexions autorisé globalement

Je ne les ai pas encore modifiés. Cela signifie-t-il que mon application sera en mesure de faire la demande max 2 en même temps (parce qu'ils sont tous sur le même hôte)? Pourquoi la valeur par défaut est 2? Devrais-je changer la valeur DEFAULT_MAX_HOST_CONNECTIONS (il y a beaucoup d'utilisateurs pour cette application qui peut accéder à JSP simultanément). En ce qui concerne DEFAULT_MAX_TOTAL_CONNECTIONS, ce paramètre est-il important pour mon application?

Merci d'avance!

+0

"Devrais-je changer", "Est-ce important pour mon application"? vous seul pouvez savoir ce qui est important pour vous. Essayez-le, voir si cela rend les choses meilleures pour vous. – Mat

+0

Nous ne pouvons pas essayer, nous fournissons à nos clients seulement plusieurs composants, mais n'ont pas l'application complète à tester. J'essaie juste de comprendre ce que ces paramètres signifient et quelles sont les meilleures pratiques. – Mikhail

+0

Si vous ne pouvez pas mettre à niveau à partir de la version 1.4, vous pouvez utiliser retroweaver pour transformer votre application d'une version plus récente vers la version 1.4. –

Répondre

1

Nous avions un scénario similaire il y a quelque temps et les points clés à l'utilisation multi-thread ont été

  • en utilisant un MultiThreadedHttpConnectionManager (vous faites déjà)
  • PAS instances de partage de HttpMethod (par exemple GetMethod) et HttpState entre les threads

HttpState encapsule l'état conversationnel entre les demandes suivantes dans Cluding l'ID de session (le cas échéant). Ainsi, lorsque vous tentez de faire des requêtes simultanées vers une sorte de «backend» (par exemple, un site web), vous ne voulez pas le partager entre les threads afin de ne pas mélanger les sessions et obtenir des résultats imprévisibles.

La documentation de référence a une chapter on threading et une section appelée "Concurrent execution of HTTP Methods". Le précédent explique les paramètres de configuration que vous mentionnez, ce dernier usage multi-thread en général.

Questions connexes