170 похожих чатов

Как в в фреймворке Vertx выполнять Worker Verticle в одном

потоке, а не прыгать между разными потоками? Если указать WorkerPoolSize = 1 для всего Vertx, то больше не получится использовать другие Worker Verticle, т.к. они могут быть заблокированы. Это нужно для записи в HBase из event bus.

11 ответов

13 просмотров

DeploymentOptions можно при развертывании Verticle указать: https://vertx.io/docs/apidocs/io/vertx/core/Vertx.html#deployVerticle-java.lang.String-io.vertx.core.DeploymentOptions-io.vertx.core.Handler- пример: https://medium.com/@pvub/https-medium-com-pvub-vert-x-workers-6a8df9b2b9ee

Aleksandr-🇲🇳 Автор вопроса
Ruslan
DeploymentOptions можно при развертывании Verticle...

Не срабатывает. Используются разные потоки. В примерах при создании Vertx используют.

Aleksandr 🇲🇳
Не срабатывает. Используются разные потоки. В прим...

io.vertx.core.impl.DeploymentManager#doDeploy отдельный пул и отдельный executor создается для Verticle. соответственно, пул можно с одним тредом запустить.

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

Aleksandr-🇲🇳 Автор вопроса
Алексей
А я немного не понял проблему. Вроде как можно пис...

Но каждый message, пришедший в вертикл может быть обработан в разных потоках пула.

Aleksandr 🇲🇳
Но каждый message, пришедший в вертикл может быть ...

А зачем привязываться к потокам? Если будет только 1 вертикал, что будет обрабатывать, то проблем быть не должно. Ну или я не очень понял архитектуру вашего приложения)

Aleksandr-🇲🇳 Автор вопроса
Алексей
А зачем привязываться к потокам? Если будет только...

Есть непотокобезопасный компонент - HBase client Table. Сейчас сделал костыль: 1. WorkerVirticle получает message из event bus, пишет его в блокирующую очередь. 2. Отдельный JVM поток читает блокирующую очередь и пишет в HBase.

Aleksandr 🇲🇳
Есть непотокобезопасный компонент - HBase client T...

ну так поток всегда будет один ведь. Или у вас в кластере несколько клиентов hbase?

Aleksandr-🇲🇳 Автор вопроса
Алексей
ну так поток всегда будет один ведь. Или у вас в к...

В том то и дело, что каждое сообщение обрабатывается в отдельном потоке. Проверял через вывод названия потока в stdout при получении сообщения. Работать то оно может и будет, но есть риск словить ошибку.

Aleksandr-🇲🇳 Автор вопроса
Aleksandr 🇲🇳
В том то и дело, что каждое сообщение обрабатывает...

Блин. А это я не проверял. Да, тогда может быть проблема. Но смысл костыля верный - запулить все в одну очередь и ее разгребать.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта