возникает следующая ошибка:
Ошибка ввода-вывода при запросе GET для "https://samplepath": время ожидания при получении URL-адреса: https://samplepath ; вложенное исключение: java. net .SocketTimeoutException: время ожидания при получении URL-адреса: samplepath
код:
RestTemplate restTemplate = new RestTemplate();
try {
URI uri = new URI("https://samplepath);
sessionInfo = restTemplate.getForObject(uri, SessionResponse.class);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Этот код записан внутри javax.servlet.Filter где все запросы будут перенесены в этот блок кода, где при этом он будет внутренне вызывать другой API
. Проблема возникает после того, как я разверну в GAE, одновременный запрос получает попадания, и некоторые запросы получат ответ, а некоторые - сбой или выдает исключение тайм-аута сокета, выполняя внутренний вызов Api через resttemplate
Любое решение этой проблемы будет оценено благодаря ,,
@Component
public class FirstFilter implements Filter {
public static Map<String, SessionResponse> sesssionDataCacheMap = Collections
.synchronizedMap(new HashMap<String, SessionResponse>());
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init() method has been get invoked");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
try {
System.out.println("doFilter() method is invoked");
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
System.out.println("Context path is " + httpServletRequest.getContextPath());
String sidFromHeader = httpServletRequest.getHeader("sid");
SessionResponse sessionInfo1 = null;
try {
sessionInfo1 = getSessionDataFromSessionId(sidFromHeader);
System.out.println("Session present in cache");
} catch (Exception e) {
System.out.println(e.getMessage());
}
chain.doFilter(httpServletRequest, httpServletResponse);
System.out.println("doFilter() method is ended");
}
}
@Override
public void destroy() {
System.out.println("destroy method is called");
}
private SessionResponse getSessionDataFromSessionId(String sessionId) {
SessionResponse sessionInfo = null;
RestTemplate restTemplate = new RestTemplate();
try {
URI uri = new URI("https://samplesessionurl" + sessionId);
sessionInfo = restTemplate.getForObject(uri, SessionResponse.class);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sessionInfo;
}
Appegine-web. xml Файл -
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
</system-properties>
<url-stream-handler>urlfetch</url-stream-handler>
<warmup-requests-enabled>false</warmup-requests-enabled>
<manual-scaling>
<instances>1</instances>
</manual-scaling>
</appengine-web-app>