Uma thread define uma propriedade de proxy, faz um pedido e restaura o valor antigo. Outra thread faz o mesmo com um proxy diferente. O código parece arrumado quando lido de cima para baixo, mas ambas as threads estão a alterar estado JVM partilhado.

System.setProperty() altera uma propriedade de sistema do processo. Não associa uma rota à thread que a chamou. Um pedido simultâneo pode observar um valor escrito para o trabalho de outra pessoa, e um cliente existente pode já ter capturado a sua própria configuração.

Torne a rota parte do cliente

Para o cliente HTTP do Java, crie clientes com seletores de proxy deliberados. Mantenha clientes separados quando as cargas de trabalho exigem políticas de encaminhamento distintas:

HttpClient client = HttpClient.newBuilder()
    .proxy(ProxySelector.of(
        new InetSocketAddress("203.0.113.10", 8080)))
    .connectTimeout(Duration.ofSeconds(5))
    .build();

As importações são java.net, java.net.http e java.time. O endereço é ilustrativo; para testes de rotas públicas permitidos, a lista de proxies HTTP fornece pontos finais candidatos. Configure prazos de pedido e autenticação de proxy separadamente conforme as necessidades da aplicação.

O método proxy do construtor registra uma escolha ao nível do cliente. Isso torna a política mais fácil de inspecionar do que uma sequência de escritas globais em torno de operações assíncronas.

As definições globais ainda têm utilidade

Uma única política de proxy para toda a JVM pode ser apropriada quando se pretende que todos os clientes participantes a sigam. Defina essa política no arranque da aplicação e verifique que bibliotecas a respeitam.

Surgem problemas quando as propriedades globais são usadas como interruptor temporário para pedidos individuais. Num servidor, trabalhadores em segundo plano e chamadas de bibliotecas podem correr simultaneamente mesmo que o seu método pareça síncrono. Mantenha o estado de encaminhamento no cliente ou conector que é dono da ligação, para que outro pedido não o possa alterar a meio do trabalho.

Artigos relacionados