Как сделать так, чтобы время ожидания запросов превышало X секунд? - PullRequest
0 голосов
/ 08 апреля 2020

Можно ли как-нибудь сделать так, чтобы запросы к моему серверу автоматически превышали время ожидания (на сервере) через X секунд?

Я хочу сделать это, потому что на запросах heroku время ожидания истекает через 30 секунд и я не хочу тратить ресурсы сервера на вычисления ответов в этих случаях. Я также хочу убить все открытые транзакции БД, поэтому я не изменяю базу данных, пока пользователь не получит приличный ответ.

Я использую HTTP-комплект 2.3.0 и compojure 1.6.1.

(я знаю, что такие запросы занимают много времени, это не лучшая практика, но это относится к проекту backoffice, и такие вещи случаются, например, когда БД становится недоступной)

1 Ответ

0 голосов
/ 08 апреля 2020

Уничтожение БД транзакций не тривиально. Если драйвер JDB C пытается подключиться к БД и ожидает ответа сервера БД, вы можете попытаться настроить это время ожидания в свойствах драйвера JDB C.

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

Если вы используете HTTPKit API напрямую (т.е. не используете кольцо), вы можете отправить ответ после истечения времени ожидания (например, используя core.asyn c). Пример этого можно найти здесь: https://www.braveclojure.com/core-async/

Поддерживается асинхронное c кольцо для HTTPKit https://github.com/http-kit/http-kit/issues/394 (спецификация Ring 2 также WIP)

Если вам нужно решение сейчас, вы можете попробовать Aleph вместо этого. Это дает вам удобство обработчиков звонков, но также позволяет асинхронно создавать ответ. https://github.com/ztellman/aleph

(может быть больше альтернатив. На ум приходит Vert.x. Может быть, и другие альтернативы Clojure)

...