Исключение SocketTimeOut в java при вызове RestTemplate GetforObject - PullRequest
0 голосов
/ 16 января 2020

возникает следующая ошибка:

Ошибка ввода-вывода при запросе 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>
...