使用Java jersey客户端的HTTP流异常掉线

时间:2018-08-24 07:14:16

标签: java jersey jersey-client

对于我们的项目之一,我们正在使用java jersey客户端使用HTTP feed流

对于客户端来说,进食很好,但是在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 个答案:

答案 0 :(得分:0)

我建议使用Wireshark在连接断开时准确地分析流量,这很可能是防火墙切断了连接。

无论如何,在没有双面日志记录的情况下尝试调试这些方案都是50%的俄罗斯规则。

如果要丢弃方案,请尝试更改正在传输的数据量,连接的参数(使用其他构造函数方法),并查看超时是否在时间上保持一致(如果超时取决于通信量)通常这是在防火墙等中介设备中触发某个阈值的线索。