HTTP流与Java jersey客户端异常丢弃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP流与Java jersey客户端异常丢弃相关的知识,希望对你有一定的参考价值。

对于我们的一个项目,我们使用java jersey客户端来使用HTTP feed流

随着客户端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 = "
";

    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(在客户端,我必须忽略它。)

答案

我建议使用wireshark在连接丢失时准确分析流量,防火墙很可能正在切断连接。

无论如何,在没有双面记录的情况下尝试调试这些场景是50%的俄罗斯rulette情况。

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

以上是关于HTTP流与Java jersey客户端异常丢弃的主要内容,如果未能解决你的问题,请参考以下文章

泽西岛异常:严重:Java 类的消息正文阅读器

jersey rest post 访问为http 405 异常如何解决

Jersey REST 服务抛出超时异常

jersey NoClassDefFoundError:org / objectweb / asm / ClassVisitor异常

Jersey统一异常处理

异常java.lang.IllegalArgumentException: Cannot locate declared field class org.apache.http.impl.clie(代