【问题标题】:How to set the timeout of request sended by ClientResource in Restlet Framework如何在 Restlet Framework 中设置 ClientResource 发送请求的超时时间
【发布时间】:2019-11-13 23:00:19
【问题描述】:

我正在使用 Restlet 框架,特别是 ClientResource 类,通过其自己的 get()post()put()delete() 方法将 HTTP 请求发送到服务器。由于有时服务器处于脱机状态,因此无法访问,因此我想设置比默认值更小的超时。我该怎么做?

目前我已经尝试过这种方式但没有成功:

ClientResource cr = new ClientResource(uri);

Context context = new Context();
context.getParameters().add("maxIoIdleTimeMs", "0");
context.getParameters().add("ioMaxIdleTimeMs", "0");
context.getParameters().add("socketTimeout", "1000");

cr.setNext(new Client(context, Protocol.HTTP));
cr.setRetryOnError(false);

...

Representation r = cr.get();

结果与默认情况相同,即在从get() 方法返回连接错误异常之前大约超时60-90 秒。我的目的是预测它。

【问题讨论】:

  • 您是否尝试设置readTimeout
  • 是的,但它不起作用。
  • 也许你可以试试 Mashape Unirest 库?
  • @xybrek 我不能,因为这意味着必须更改我项目中的许多内容。无论如何,这不是一个好的答案。

标签: java restlet clientresource


【解决方案1】:

正确设置超时时间:

Component c = new Component();
Client client = c.getClients().add(Protocol.HTTP);
client.getContext().getParameters().add ( "socketTimeout", "10" );
Response resp = client.handle(new Request(Method.GET, "https://swapi.co/api/people/1/"));
System.out.println("Output: " + resp.getEntity().getText());

此代码将根据您的需要抛出一个超时异常,将socketTimeout 增加到至少 1000 以便能够检索测试 API JSON 响应。

此外,使用了以下版本:

<dependency>
  <groupId>org.restlet.jse</groupId>
  <artifactId>org.restlet</artifactId>
  <version>2.4.0</version>
</dependency>
<dependency>
  <groupId>org.restlet.jse</groupId>
  <artifactId>org.restlet.ext.httpclient</artifactId>
  <version>2.4.0</version>
</dependency> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多