ਇੱਕੋ ਸਮੇਂ ਦੀਆਂ Java ਬੇਨਤੀਆਂ ਗਲਤ ਪਰਾਕਸੀ ਸੈਟਿੰਗਾਂ ਸਾਂਝੀਆਂ ਕਰ ਸਕਦੀਆਂ ਹਨ
ਵੇਖੋ ਕਿ ਪ੍ਰਤੀ ਬੇਨਤੀ ਗਲੋਬਲ ਪ੍ਰਾਪਰਟੀ ਬਦਲਣਾ ਥਰੈਡਾਂ ਵਿਚਕਾਰ ਕਿਵੇਂ ਲੀਕ ਹੁੰਦਾ ਹੈ ਅਤੇ ਪਰਾਕਸੀ ਨੀਤੀ ਕਲਾਇੰਟ ਉੱਤੇ ਕਿਵੇਂ ਰੱਖਣੀ ਹੈ।
ਇੱਕ ਥਰੈਡ ਪਰਾਕਸੀ ਪ੍ਰਾਪਰਟੀ ਸੈੱਟ ਕਰਦਾ ਹੈ, ਬੇਨਤੀ ਕਰਦਾ ਹੈ ਅਤੇ ਪੁਰਾਣੀ ਵੈਲਿਊ ਬਹਾਲ ਕਰਦਾ ਹੈ। ਦੂਜਾ ਥਰੈਡ ਵੱਖਰੀ ਪਰਾਕਸੀ ਨਾਲ ਇਹੀ ਕਰਦਾ ਹੈ। ਉੱਪਰ ਤੋਂ ਹੇਠਾਂ ਪੜ੍ਹਨ 'ਤੇ ਕੋਡ ਸਾਫ਼ ਦਿਸਦਾ ਹੈ, ਪਰ ਦੋਵੇਂ ਥਰੈਡ ਸਾਂਝੀ JVM ਸਥਿਤੀ ਬਦਲ ਰਹੇ ਹਨ।
System.setProperty() ਪ੍ਰਕਿਰਿਆ ਲਈ ਸਿਸਟਮ ਪ੍ਰਾਪਰਟੀ ਬਦਲਦਾ ਹੈ। ਇਹ ਇਸਨੂੰ ਕਾਲ ਕਰਨ ਵਾਲੇ ਥਰੈਡ ਨਾਲ ਕੋਈ ਰਸਤਾ ਨਹੀਂ ਜੋੜਦਾ। ਇੱਕੋ ਸਮੇਂ ਦੀ ਬੇਨਤੀ ਕਿਸੇ ਹੋਰ ਦੇ ਕੰਮ ਲਈ ਲਿਖੀ ਵੈਲਿਊ ਦੇਖ ਸਕਦੀ ਹੈ, ਅਤੇ ਮੌਜੂਦਾ ਕਲਾਇੰਟ ਆਪਣੀ ਸੰਰਚਨਾ ਪਹਿਲਾਂ ਹੀ ਫੜ ਚੁੱਕਾ ਹੋ ਸਕਦਾ ਹੈ।
ਰਸਤੇ ਨੂੰ ਕਲਾਇੰਟ ਦਾ ਹਿੱਸਾ ਬਣਾਓ
Java ਦੇ HTTP ਕਲਾਇੰਟ ਲਈ, ਜਾਣਬੁੱਝ ਕੇ ਚੁਣੇ ਪਰਾਕਸੀ ਚੋਣਕਾਰਾਂ ਨਾਲ ਕਲਾਇੰਟ ਬਣਾਓ। ਜਦੋਂ ਕੰਮਾਂ ਨੂੰ ਵੱਖਰੀਆਂ ਰਾਊਟਿੰਗ ਨੀਤੀਆਂ ਚਾਹੀਦੀਆਂ ਹੋਣ ਤਾਂ ਵੱਖਰੇ ਕਲਾਇੰਟ ਰੱਖੋ:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();ਆਯਾਤ java.net, java.net.http ਅਤੇ java.time ਹਨ। ਪਤਾ ਉਦਾਹਰਨ ਲਈ ਹੈ; ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਜਨਤਕ ਰਸਤਾ ਟੈਸਟਾਂ ਲਈ HTTP ਪਰਾਕਸੀ ਸੂਚੀ ਉਮੀਦਵਾਰ ਐਂਡਪੌਇੰਟ ਦਿੰਦੀ ਹੈ। ਬੇਨਤੀ ਦੀਆਂ ਸਮਾਂ-ਸੀਮਾਵਾਂ ਅਤੇ ਪਰਾਕਸੀ ਪ੍ਰਮਾਣਿਕਤਾ ਐਪ ਦੀਆਂ ਲੋੜਾਂ ਅਨੁਸਾਰ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਸੰਰਚਿਤ ਕਰੋ।
ਬਿਲਡਰ ਦਾ proxy ਢੰਗ ਕਲਾਇੰਟ-ਪੱਧਰੀ ਚੋਣ ਦਰਜ ਕਰਦਾ ਹੈ। ਇਸ ਨਾਲ ਅਸਿੰਕ੍ਰੋਨਸ ਕਾਰਵਾਈਆਂ ਦੁਆਲੇ ਲਪੇਟੇ ਗਲੋਬਲ ਲਿਖਤਾਂ ਦੇ ਕ੍ਰਮ ਨਾਲੋਂ ਨੀਤੀ ਦੀ ਜਾਂਚ ਕਰਨਾ ਸੌਖਾ ਹੁੰਦਾ ਹੈ।
ਗਲੋਬਲ ਸੈਟਿੰਗਾਂ ਦਾ ਅਜੇ ਵੀ ਉਪਯੋਗ ਹੈ
ਜਦੋਂ ਹਰ ਹਿੱਸਾ ਲੈਣ ਵਾਲਾ ਕਲਾਇੰਟ ਇਸਦੀ ਪਾਲਣਾ ਕਰਨ ਲਈ ਬਣਾਇਆ ਗਿਆ ਹੋਵੇ ਤਾਂ ਪੂਰੇ JVM ਲਈ ਇੱਕ ਪਰਾਕਸੀ ਨੀਤੀ ਢੁਕਵੀਂ ਹੋ ਸਕਦੀ ਹੈ। ਉਹ ਨੀਤੀ ਐਪ ਸ਼ੁਰੂ ਹੋਣ ਵੇਲੇ ਸੈੱਟ ਕਰੋ ਅਤੇ ਜਾਂਚੋ ਕਿ ਕਿਹੜੀਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਇਸਦਾ ਸਤਿਕਾਰ ਕਰਦੀਆਂ ਹਨ।
ਸਮੱਸਿਆਵਾਂ ਉਦੋਂ ਆਉਂਦੀਆਂ ਹਨ ਜਦੋਂ ਗਲੋਬਲ ਪ੍ਰਾਪਰਟੀਆਂ ਨੂੰ ਵੱਖਰੀਆਂ ਬੇਨਤੀਆਂ ਲਈ ਅਸਥਾਈ ਸਵਿੱਚ ਵਜੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਸਰਵਰ ਵਿੱਚ, ਤੁਹਾਡਾ ਢੰਗ ਸਿੰਕ੍ਰੋਨਸ ਦਿਸਦਾ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ਬੈਕਗ੍ਰਾਊਂਡ ਵਰਕਰ ਅਤੇ ਲਾਇਬ੍ਰੇਰੀ ਕਾਲਾਂ ਇੱਕੋ ਸਮੇਂ ਚੱਲ ਸਕਦੀਆਂ ਹਨ। ਰਾਊਟਿੰਗ ਸਥਿਤੀ ਨੂੰ ਉਸ ਕਲਾਇੰਟ ਜਾਂ ਕਨੈਕਟਰ ਕੋਲ ਰੱਖੋ ਜੋ ਕਨੈਕਸ਼ਨ ਦਾ ਮਾਲਕ ਹੈ, ਤਾਂ ਜੋ ਦੂਜੀ ਬੇਨਤੀ ਕੰਮ ਵਿਚਕਾਰ ਇਸਨੂੰ ਬਦਲ ਨਾ ਸਕੇ।