2012-12-13 147 views
1


我们Jersey客户端从服务器得到下面的异常。Jersey客户端获取状态504(UniformInterfaceException) - 如何配置客户端超时?

Got exception from API:POST http://my-host.com/api/x/y returned a response status of 504 Gateway Timeout, Stack trace: com.sun.jersey.api.client.UniformInterfaceException: POST http://my-host.com/api/x/y returned a response status of 504 Gateway Timeout 
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:698) 
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74) 
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:574) 
at com.g.e.s.i.t.XYZ.callResource(ABC.java:84) 
at ... 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

这是客户创建代码:

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); 
provider.setMapper(mapper); 
ClientConfig clientConfig = new DefaultClientConfig(); 
    clientConfig.getSingletons().add(provider); 
    Client client = Client.create(clientConfig); 
    client.setConnectTimeout(Integer.MAX_VALUE); 
    client.setReadTimeout(Integer.MAX_VALUE); 
    return client.resource(url); 

所以,我们正在试图安装客户端的最大超时,但于事无补。

任何一个知道如何配置客户端的超时?
可能是更好地处理Tomcat的超时? (怎么样?),虽然我认为它是在一些负载平衡器后面。

回答

2

试试下面设置客户端代码读取超时。

clientConfig.getProperties().put(ClientConfig.PROPERTY_READ_TIMEOUT,30000);//30 seconds read timeout 

请尝试下面的代码来设置客户端连接超时。

clientConfig.getProperties().put(ClientConfig.PROPERTY_CONNECT_TIMEOUT,30000);//30 seconds for connection timeout 
+0

伟大工程:)谢谢!虽然最后原因是增加了服务器端的超时:) – urir

+0

@sreemanth pulagam你能解释为什么一个人使用这种阅读和连接超时?我使用我的Jersey客户端。我为连接和读取设置了5秒的超时时间。并且为了测试我已经在我的服务中放了一个线程,持续6秒。我得到一个超时异常,但在此之后,我的服务恢复正常,并给予响应。我的要求是设置服务响应的超时时间,如果它通过,它应该出来,然后再试一次。另外我需要设置客户端尝试连接的次数。 –