0

我使用 RESTlet 作为服务器和客户端。服务器在 Tomcat 上运行,我可以从浏览器访问它。

对于客户端,我使用的是 org.restlet.resource.ClientResource。如果我向该服务器发送一些请求,它工作正常,但如果我发送几百个调用它会中断:

Fev 20, 2013 12:59:43 PM org.restlet.engine.connector.ClientConnectionHelper start
INFO: Starting the internal [HTTP/1.1] client
(some calls work)
Fev 20, 2013 1:00:49 PM org.restlet.util.SelectionRegistration block
WARNING: The thread blocked at the cyclic barrier has timed out
java.util.concurrent.TimeoutException
    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
    at org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
    at org.restlet.engine.io.Buffer.process(Buffer.java:601)
    at org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
    at java.io.InputStream.read(InputStream.java:101)
    at org.restlet.engine.io.BioUtils.copy(BioUtils.java:80)
    at org.restlet.engine.io.NioUtils.copy(NioUtils.java:147)
    at org.restlet.representation.ReadableRepresentation.write(ReadableRepresentation.java:104)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:76)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:82)

Exception in thread "main" java.io.IOException: The thread blocked at the cyclic barrier has timed out.
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:197)
    at org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
    at org.restlet.engine.io.Buffer.process(Buffer.java:601)
    at org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
    at java.io.InputStream.read(InputStream.java:101)
    at org.restlet.engine.io.BioUtils.copy(BioUtils.java:80)
    at org.restlet.engine.io.NioUtils.copy(NioUtils.java:147)
    at org.restlet.representation.ReadableRepresentation.write(ReadableRepresentation.java:104)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:76)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:82)
Caused by: java.util.concurrent.TimeoutException
    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
    ... 11 more

我想使用 Apache HTTP Client 来进行更多调用,但我找不到有关如何附加它的文档。

4

2 回答 2

1

我遇到了同样的问题,但是在一台实时生产机器上,这导致我的服务器占用了 100% 的 CPU。我能够通过返回使用restlet 2.1.0而不是2.1.2. 不是根本问题的真正答案,但绝对是一个解决方案。

于 2013-04-05T03:07:21.727 回答
0

每个证据都指出此错误是 RESTlet 客户端的内部错误。我没有使用它,而是使用了URL.getInputStream(),并且我能够轻松地对我的 RESTlet 服务器进行 10K 连续调用。当然 URL 很简单,它无法处理错误,不应该在生产中使用,但它证明 RESTlet 不值得。

我还设法让 Benchmark 将 Axis2 和 RESTlet 作为服务器进行比较,它们具有相同的性能,需要 3-5 毫秒来响应请求,我希望 REST 更快......我直接从 Servlet 实现了 REST 服务器,它也是 0-1毫秒响应。正因为如此,我决定放弃 REST 并坚持使用 SOAP Axis2,它并不比 RESTlet 慢,也比 Servlet 慢几毫秒,但它更加灵活和强大。

于 2013-02-24T16:28:12.773 回答