Два случая, несмотря на использование одновременных запросов и низкий трафик - PullRequest
0 голосов
/ 09 февраля 2012

Мое веб-приложение Apache Wicket использует JDO для сохранения данных в GAE / J.

При запуске приложения домашняя страница ставит задачу в очередь перед ее отображением (с нулевой задержкой по умолчанию ETA). Эта задача приводит к созданию новой веб-страницы Wicket для создания экземпляра одноэлементной фабрики диспетчера персистентности (PMF) JVM для использования приложением в течение его срока службы.

Я настроил приложение на использование одновременных запросов, добавив

<threadsafe>true</threadsafe>

в файл приложения appengine-web.xml.

Несмотря на это, после одного запроса на посещение домашней страницы приложения я получаю два экземпляра приложения: один, созданный по запросу на посещение домашней страницы, и другой, созданный в результате выполнения поставленной в очередь задачи (примерно через 6-7 секунд спустя ).

Я мог бы попытаться решить эту проблему, отложив выполнение поставленной в очередь задачи (возможно, примерно на 10 секунд?), Но зачем мне это делать, когда я включил параллельные запросы? Разве первый экземпляр приложения GAE / J не сможет обрабатывать два запроса близко друг к другу, не вызывая создание второго экземпляра? Я предполагаю, что я делаю что-то не так, но что это?

Я произвел поиск по тегам Stack Overflow ([google-app-engine] [java]), а также по амортизирующей группе "Google App Engine для Java", но не нашел ничего подходящего для моего вопроса.

Буду признателен за любые указатели.

1 Ответ

1 голос
/ 09 февраля 2012

Если вы хотите, чтобы задача использовала существующий экземпляр, вы можете установить заголовок X-AppEngine-FailFast, который в соответствии с документами GAE:

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

Стоит ознакомиться с документом Управление использованием ресурсов вашего приложения для получения информации о производительности и настройке.

...