@Chijuk

Какая правильная архитектура развертывания приложения с REST сервисом?

Есть задача: написать telegram bot, который буде оповещать пользователя о возникновении события в некой внешней системе. Бот должен быть развернут на внутреннем сервере компании.

Мной на Java написан проект, где реализована логика бота (long pooling) и развернут REST сервис (Jersey) к которому будет обращаться внешняя система. Все внутри одного проекта.

Развернуть это все разом на tomcat (одним war) не получилось, так как long pooling попросту не работает как сервлет. Отдельно REST поднять на tomcat я могу, но не работает бот. Если запустить приложение с IDE - бот работает, не работает REST сервис.

Возможно стоит бот настроить через web hook и поднять его на tomcat отдельным приложением, но не понятно как с ним будет взаимодействовать REST сервис.
Возможно я ошибся в архитектуре самого приложения и проекровать его нужно по другому. Возможно я решил использовать неправильные способ и технологии деплоя.
Помогите советом, как все это заставить работать на сервере.
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
leahch
@leahch
3Д специалист. Долго, Дорого, Дерьмово.
А какие проблемы с томкатом? В сервлетах есть такое понятие, как листенеры. Определяете листенер, который реализует ServletContextListener. В нем заводите свои треды, которые живут, пока живет ваше приложение в томкате. Прописываете его в web.xml. В ваших рест-сервисах достаточно получить ServletContext и оттуда забирать созданный инстанс класса.
<listener>
 <listener-class>
 my.long.life.clazz.Listener
 </listener-class>
</listener>


Вот подробно разобран листенер (пункт 5 если чо) - https://www.journaldev.com/1945/servletcontextlist...

Ну или плюнуть на сервлеты к херам собачьим и сделать все на javalin или jooby! (мой поросячий выбор)
import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        MyTelegramBot mybot = new MyTelegramBot(); // тут херачим телеграм
        Javalin app = Javalin.create().start(7000); // тут запускаем сервер
        app.get("/", ctx -> ctx.result("Hello World")); // тут херачим свои REST
        app.put("/myrest", ctx -> mybot.send(ctx));
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы