As solicitudes Java simultáneas poden compartir axustes de proxy incorrectos
Manteña as solicitudes Java simultáneas nas súas rutas previstas sen cambiar os axustes de proxy compartidos da JVM.
Un fío establece unha propiedade de proxy, fai unha solicitude e restaura o valor anterior. Outro fío fai o mesmo cun proxy diferente. O código parece ordenado ao lelo de arriba abaixo, pero ambos os fíos están cambiando estado compartido da JVM.
System.setProperty() cambia unha propiedade do sistema para o proceso. Non achega unha ruta ao fío que o chamou. Unha solicitude simultánea pode observar un valor escrito para o traballo doutra persoa, e un cliente existente pode ter capturado xa a súa propia configuración.
Faga que a ruta forme parte do cliente
Para o cliente HTTP de Java, cree clientes con selectores de proxy deliberados. Manteña clientes separados cando as cargas de traballo requiren políticas de encamiñamento distintas:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
As importacións son java.net, java.net.http e java.time. O enderezo é ilustrativo; para probas permitidas de rutas públicas, a lista de proxies HTTP fornece puntos finais candidatos. Configure os prazos das solicitudes e a autenticación do proxy por separado segundo as necesidades da aplicación.
O método proxy do construtor rexistra unha elección a nivel de cliente. Iso fai que a política sexa máis doada de inspeccionar que unha secuencia de escrituras globais envoltas arredor de operacións asíncronas.
Os axustes globais aínda teñen utilidade
Unha única política de proxy para toda a JVM pode ser axeitada cando todos os clientes participantes deben seguila. Estableza esa política ao iniciar a aplicación e verifique que bibliotecas a respectan.
Os problemas xorden cando as propiedades globais se usan como un interruptor temporal para solicitudes individuais. Nun servidor, os traballadores en segundo plano e as chamadas de biblioteca poden executarse simultaneamente aínda que o seu propio método pareza síncrono. Manteña o estado de encamiñamento co cliente ou conector que posúe a conexión, para que outra solicitude non poida cambialo a metade do traballo.