ഒരേസമയത്തുള്ള 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-വ്യാപക പ്രോക്സി നയം ഉചിതമായിരിക്കാം. ആ നയം ആപ്പ് ആരംഭിക്കുമ്പോൾ സെറ്റ് ചെയ്യുക, ഏത് ലൈബ്രറികൾ അത് മാനിക്കുന്നുവെന്ന് പരിശോധിക്കുക.
ഗ്ലോബൽ പ്രോപ്പർട്ടികൾ വ്യക്തിഗത അഭ്യർത്ഥനകൾക്കുള്ള താൽക്കാലിക സ്വിച്ചായി ഉപയോഗിക്കുമ്പോഴാണ് പ്രശ്നങ്ങൾ ഉണ്ടാകുന്നത്. ഒരു സെർവറിൽ, നിങ്ങളുടെ രീതി സിൻക്രണസ് ആയി തോന്നിയാലും പശ്ചാത്തല വർക്കർമാരും ലൈബ്രറി വിളികളും ഒരേസമയം പ്രവർത്തിച്ചേക്കാം. കണക്ഷൻ സ്വന്തമാക്കിയ ക്ലയന്റിലോ കണക്ടറിലോ റൂട്ടിംഗ് അവസ്ഥ സൂക്ഷിക്കുക, അതുവഴി മറ്റൊരു അഭ്യർത്ഥന ജോലിയുടെ നടുവിൽ അത് മാറ്റാൻ കഴിയില്ല.