Рестлеты 2.1-RC1 - пример необходимого кода ClientResource - PullRequest
1 голос
/ 07 декабря 2011

Мы пытаемся разработать / настроить клиент перезапуска, который будет отправлять HTTP POST до 10+ запросов в секунду.

На сайте перезапуска приведен пример клиентского кода для потребления ресурсов.Их пример:

ClientResource clientResource = new ClientResource(
            "http://localhost:8182/rest/test");
    TestResource testResource = clientResource.wrap(TestResource.class);

    // Retrieve the JSON value
    Customer result = testResource.retrieve();

Однако другие обсуждения (и комментарии к этой вики) говорят, что есть проблема с этим подходом.

Кажется неясным, следует ли вызывать release() и / или exhaust() для освобождения ресурсов.Я пробовал, например,

  ClientResource cs = new ClientResource(rootConnectionString);
  final Representation rep = cs.post(s);
    if (rep != null) {
        final long numBytes = rep.exhaust();
        rep.release();
    }

Наше клиентское приложение не может полагаться на сборщик мусора, чтобы избежать нехватки ресурсов.В идеале мы бы повторно использовали одно и то же соединение / сокет для повышения производительности.

Причина, по которой я спрашиваю, состоит в том, что наше приложение не работает должным образом при тестировании производительности, мы видим периодически возникающие проблемы.Я ДУМАЮ, что это на стороне клиента, так как нагрузочное тестирование с другими инструментами к серверу в порядке.

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:260)
at org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:115)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:333)
at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:111)
at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:109)
at org.restlet.Client.handle(Client.java:190)
at org.restlet.resource.ClientResource.handle(ClientResource.java:1064)
at org.restlet.resource.ClientResource.handleOutbound(ClientResource.java:1153)
at org.restlet.resource.ClientResource.handle(ClientResource.java:996)
at org.restlet.resource.ClientResource.handle(ClientResource.java:972)
at org.restlet.resource.ClientResource.post(ClientResource.java:1381)
at org.restlet.resource.ClientResource.post(ClientResource.java:1327)

Что действительно может помочь, так это некоторый пример кода, который очищается правильно.

...