Поток HTTP отключен анонимно с помощью java jersey client
Для одного из наших проектов мы потребляем поток HTTP-потоков с помощью java-джерси-клиента
С клиентом Потребление корма прекрасное, но после 10 минут времени поток падает ненормально; даже несмотря на то, что производитель потоков работает и создает поток
Это то, что я пробовал;
import java.util.Date;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.client.Invocation.Builder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.client.ChunkedInput;
public class StreamClient {
private static final String BOUNDARY = "\n";
public void makeCall() {
System.out.println("Start Time"+ new Date()) ;
Client client = ClientBuilder.newClient();
BasicAuth auth = new BasicAuth();
auth.setPassword("username");
auth.setUserName("password");
BasicAuthentication basicAuthentication = new BasicAuthentication(auth);
client.register(basicAuthentication);
WebTarget target = client.target("https://localhost:7211/stream/v1/");
Builder request = target.request(MediaType.APPLICATION_JSON);
Response response = request.get();
final ChunkedInput<String> chunkedInput = response.readEntity(new GenericType<ChunkedInput<String>>() {
});
chunkedInput.setParser(ChunkedInput.createParser(BOUNDARY));
String chunk;
do {
if((chunk = chunkedInput.read()) != null)
System.out.println(chunk);
}while (!chunkedInput.isClosed());
System.out.println("End Time " + new Date());
}
public static void main(String[] args) {
StreamClient client = new StreamClient();
client.makeCall();
}
}
Если поток не падает; поток должен находиться внутри цикла while; как только поток закрывается, поток выйдет и распечатает инструкцию sysout
Здесь возникает вопрос: почему chunkedinput закрыт.
Пожалуйста, помогите мне с разрешением;
Здесь для каждого разделения полезной нагрузки/фрагмента на сервере это \r\n и сделать это соединение активным с сервера, отправив \n (на стороне клиента я должен игнорировать это.)
Ответы
Ответ 1
Я бы рекомендовал использовать wirehark для анализа трафика точно в момент потери соединения, скорее всего, брандмауэр разрезает конвекцию.
В любом случае попытка отладки этих сценариев без двусторонней регистрации - это 50% -ная ситуация с русским языком.
Если вы хотите отменить сценарии, попробуйте изменить объем передаваемых данных, параметры соединения (используя другие методы конструктора) и проверьте, соответствует ли время ожидания во времени, если таймаут зависит от количества трафика, который обычно подсказка, что вы запускаете некоторый порог в промежуточном устройстве, таком как брандмауэр.