Настройка HttpClient для использования в качестве клиента Restlet - PullRequest
5 голосов
/ 18 июля 2010

Я застрял, настраивая Restlet для моего клиентского кода. Я использую Restlet 2 и HttpClient 4. Я добавил jar-файл расширения и jttp-файл HttpClient в путь сборки, и это похоже на работу

Однако я не знаю, как настроить его подробно. Я не создаю клиента вручную, вместо этого я использую ClientResource s для взаимодействия, и это единственная часть, где я использую Restlet напрямую. Конкретная реализация клиентов, кажется, скрыта в реализации фреймворка. Я нашел несколько подсказок, как настроить клиентов, но все они были написаны для Restlet 1.x.

Подробно хочу настроить следующие детали:

  • Изменить пользовательский агент для клиентских запросов. clientResource.getClientInfo().setAgent(…) не работает.
  • Увеличить количество параллельных соединений на хост.
  • Включить постоянные соединения и пул на хост. Очевидно, что Restlet до сих пор создает новое соединение для ClientResource, что не очень эффективно.

Конечно, я уже посмотрел на HttpClientHelper , но я не знаю, где и как это добавить. Уже искал документацию для этого, но пока нет.

Спасибо за помощь!

1 Ответ

4 голосов
/ 18 июля 2010

Во-первых, чтобы убедиться, что ваш Restlet использует HttpClient от Apache для соединений, вам нужно иметь org.restlet.ext.httpclient.jar на пути к классам.Во-вторых, вы передаете Context в конструктор вашего ClientResource?Если нет, то вам нужно:

    final Context context = new Context();
    context.getParameters().set("maxConnectionsPerHost", "20");

    final ClientResource requestResource = new ClientResource(context, "http://localhost:8182/request");
    requestResource.getClientInfo().setAgent("Example-Client/1.0");

, который позаботится о настройке maxConnectionsPerHost, которая вас интересует. Кроме того, вызов setAgent работал для меня как ожидалось.Я не уверен, в чем может быть проблема в вашем случае.

Что касается постоянных соединений, кажется, что HttpClient позаботится об этом за вас.Рестлет использует HttpClient ThreadSafeClientConnManager, описанный здесь .Упоминается поддержка постоянных соединений по этой ссылке.Кажется, что этот объект также позаботится о ваших проблемах объединения.Вы можете использовать один и тот же экземпляр ClientResource, чтобы воспользоваться этим.Я не сразу осведомлен о политике безопасности потоков ClientResource, но надеюсь, что она безопасна для потоков.

...