Обработка асинхронных действий с помощью vert.x - PullRequest
0 голосов
/ 13 сентября 2018

Я написал свой веб-сервис на Java, используя vert.x, и мне кажется, что мне не хватает нескольких вещей, касающихся работы инфраструктуры.

Я развернул одну вертикалку, назовем ее HttpVerticle. внутри есть одна маршрутизация (router.post("/dowork").handler(new MyHandler()))

MyHandler выполняет очень быстрое действие предварительной обработки, а затем отправляет сообщение на шину событий.

Существует вторая вертикаль WorkerVerticle, которая развертывается при развертывании HttpVerticle и использует шину событий для сообщений от MyHandler. Здесь есть код, который может быть длинным (ожидание вызова API REST / запись в БД / запись в S3 и т. Д.), И когда это будет сделано, я просто возвращаю message.reply() в MyHandler

Когда я пытаюсь работать с ~ 150 одновременными запросами, это выглядит хорошо, но при попытке перейти на 200 и более, я начинаю получать тайм-ауты. Я увеличил количество экземпляров для HttpVerticle, и это помогло.

Что я не понимаю, почему? Поток HttpVerticle в основном не делает ничего, кроме записи в шину, поэтому он должен иметь возможность отвечать даже на 1000 запросов, не так ли?

Мой второй вопрос здесь, если мой шаблон Handler-> write to bus-> Verticle потребление из шины является правильным, потому что я видел второй шаблон просто использования Handler, без использования шины событий

...