Как обработать Exception и сделать реконнект?

111
14 июня 2021, 22:20

Имеется метод, который коннектится по заданному url через прокси.

public void myGetContent(int startRange, int endRange, String threadName) throws Exception{
        //..некоторый код        
        ProxyParser proxyParser = new ProxyParser();
        //Массив с ip и портами
        ArrayList<String> proxyList = proxyParser.getProxyRowsArray();
        //устанавливаем значение proxy
        setProxy(proxyList.get(0), Integer.parseInt(proxyList.get(1)));
        int i = startRange;
        while (i < endRange){
            Thread.sleep(3000);
            startTime = System.currentTimeMillis();
            URL website = new URL("http://my-url.com/...&DocNumber" + i);
            //Открываем соединение через прокси
            HttpURLConnection connection = (HttpURLConnection) website.openConnection(proxy);
            ReadableByteChannel rbc = Channels.newChannel(connection.getInputStream());
            FileOutputStream fos =
                    new FileOutputStream(+ i  /*НАЗВАНИЕ СОХРАНЯЕМОГО ДОКУМЕНТА */
                            + ".html");
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            //Размер загруженного файла
            size = fos.getChannel().size();
            fos.close();
            //.....некоторый код
            i ++;
        }
    }  

Как сделать реконнект в случае возникновения TimeoutException'а или какого-либо другого исключения при наличии ArrayList'а со значениями ip и port?

Answer 1

Можно попробовать заключить блок кода подключения в цикл:

boolean isConnect = false;
while(!isConnect) {
    try {
        // код подключения, где может возникнуть TimeoutException
        isConnect = true; // до сюда не дойдёт, если возникло исключение
    catch(TimeoutException ex) {
        // возможно сообщение о повторной попытки подключения
        isConnect = false;
    }
}

Тогда из цикла не выйдет, пока не произойдёт подключение, также здесь можно задать количество попыток.

READ ALSO
boolean и размер в памяти

boolean и размер в памяти

Размер (бит) boolean 8 (в массивах), 32 (не в массивах используется int)Вот понимаю что всегда int это 32 бита

107
Как при помощи Joda получить 2019-08-22T13:26:36.447019Z

Как при помощи Joda получить 2019-08-22T13:26:36.447019Z

Нужно получить формат времени ввиде: 2019-08-22T13:26:36447019Z, но как это сделать что-то не вкурю

129
Не правильный URI для возврата

Не правильный URI для возврата

Клиент отправляет на сервер картинкуНа сервере в конфиге прописан каталог для сохранения изображения:

92
Необязательные параметры запроса Spring

Необязательные параметры запроса Spring

Моя задача реализовать PATCH метод контроллераРассмотрим два случая:

85