Имитировать сетевую задержку с Apache Tomcat?

Можно ли настроить Apache Tomcat для имитации сетевой латентности, которую обычно имеет клиент при запросе данных с сервера для запросов по локальному хосту? Я пытаюсь проверить, как внешний интерфейс приложения Java Servlet будет отвечать на запросы с медленным временем отклика.

Я знаю, что могу войти и добавить Thread.sleep(100) во все мои исходные файлы для Thread.sleep(100) Java, но я предпочел бы иметь решение, которое можно настроить в Tomcat, а не в моем фактическом приложении.

Вы можете имитировать сетевую задержку, используя прокси-сервер на своем локальном хосте, который вводит латентность, ограничения пропускной способности и даже отбрасывает пакеты.

DonsProxy выполнит эту работу. Вот хорошая статья, описывающая, как настроить его для имитации пользователя в плохой сети.

Вы можете реализовать фильтр сервлета и перехватить все запросы. В каждом запросе вы будете делать этот Thread.sleep или что-то еще. Все запросы к вашим сервлетам будут отложены.

Это легко осуществимо в Tomcat, создав клапан.

Создайте class, который расширяет class ValveBase от tomcat.

Код внутри должен быть примерно таким:

 /** * {@inheritDoc} */ @Override public void invoke(final Request request, final Response response) throws IOException, ServletException { if (randomDelay != 0) { long delay = minDelay + randomizer.nextInt(randomDelay); try { if (LOGGER.isDebugEnabled()) { LOGGER.debug("sleeping for " + delay + " ms"); } Thread.sleep(delay); } catch (InterruptedException e) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("someone wake me up : " + e.getMessage()); } } } // let's continue ! getNext().invoke(request, response); } 

Скомпилируйте его в банке, которую вы запишете в каталоге tomcat lib (обычно {catalina.home} / lib).

Наконец добавьте объявление клапана в server.xml:

    (...)   

Е.И.В.