Кваркус Верт.x: параллельные потоки?

#java #multithreading #vert.x #quarkus

#Ява #многопоточность #верт.х #кваркус

Вопрос:

Я изучаю quarkus, mutiny и vert.x. Я хочу создавать соединения с двумя базами данных и получать данные параллельно.

Я создаю две похожие вершины (вторая вершина отличается только именем источника данных, отображателем и сущностью).:

 @ApplicationScoped public class DbFruitVerticle extends AbstractVerticle {  private static final Logger LOGGER = Logger.getLogger(DbFruitVerticle.class);   @Inject  @ReactiveDataSource("fruit")  PgPool pgPoolFruit;    @Override  public Unilt;Voidgt; asyncStart() {  LOGGER.info("gt;gt;gt; DbFruitVerticle asyncStart");   return vertx.eventBus().consumer("runrun").handler(m -gt; {  LOGGER.info("gt;gt;gt; Start Handler");  getAll().subscribe()  .with(fruit -gt; LOGGER.info("gt;gt;gt; fruit "   fruit.getId()),  fail -gt; fail.printStackTrace());  }  ).completionHandler();  }   public Multilt;Fruitgt; getAll() {  return pgPoolFruit.query("select f.* from fruit f").execute()  .onItem().transformToMulti(set -gt; Multi.createFrom().iterable(set))  .onItem().transform(this::mapFruit);  } // mapper }  

вершины дельпоя:

 public void init(@Observes StartupEvent event,  Vertx vertx,  DbTestVerticle dbTestVerticle,  DbFruitVerticle dbFruitVerticle) {  vertx.deployVerticle(dbTestVerticle).await().indefinitely();  vertx.deployVerticle(dbFruitVerticle).await().indefinitely();  }   

Вызов процесса:

 eventBus.publish("runrun", "run");  

И посмотреть журнал:

 2021-12-02 17:02:01,551 INFO [org.byb.ver.DbFruitVerticle] (vert.x-eventloop-thread-6) gt;gt;gt; fruit 1 2021-12-02 17:02:01,551 INFO [org.byb.ver.DbFruitVerticle] (vert.x-eventloop-thread-6) gt;gt;gt; fruit 3 2021-12-02 17:02:01,552 INFO [org.byb.ver.DbFruitVerticle] (vert.x-eventloop-thread-6) gt;gt;gt; fruit 4 2021-12-02 17:02:01,552 INFO [org.byb.ver.DbFruitVerticle] (vert.x-eventloop-thread-6) gt;gt;gt; fruit 5 2021-12-02 17:02:01,552 INFO [org.byb.ver.DbFruitVerticle] (vert.x-eventloop-thread-6) gt;gt;gt; fruit 6 2021-12-02 17:02:01,752 INFO [org.byb.ver.DbTestVerticle] (vert.x-eventloop-thread-5) gt;gt;gt; bill 1 2021-12-02 17:02:01,753 INFO [org.byb.ver.DbTestVerticle] (vert.x-eventloop-thread-5) gt;gt;gt; bill 2 2021-12-02 17:02:01,753 INFO [org.byb.ver.DbTestVerticle] (vert.x-eventloop-thread-5) gt;gt;gt; bill 3  

Кажется, что сначала обрабатывается поток-6, а затем поток-5. Почему они не параллельны? Как сделать их параллельными? Существует ли наилучшая практика для подобных задач? Пожалуйста, помогите.

Комментарии:

1. Я бы сказал, что они работают параллельно. Увеличьте количество записей в вашей базе данных до нескольких сотен, чтобы отбор и обработка данных занимали более значительное количество времени. При вашей текущей настройке фурий и счет обрабатываются менее чем за 1 мс

2. Я добавляю строки в таблицы (6000 и 8000), кажется, они в порядке: ` 2021-12-02 19:14:40 622 ИНФОРМАЦИЯ [org.byb.ver. DbTestVerticle] (vert.x-eventloop-поток-5) gt;gt;gt;gt;gt;gt; счет 2371 2021-12-02 19:14:40 622 ИНФОРМАЦИЯ [org.byb.ver. DbTestVerticle] (vert.x-eventloop-поток-5) gt;gt;gt;gt;gt;gt; счет 2372 2021-12-02 19:14:40 620 ИНФОРМАЦИЯ [org.byb.ver. DbFruitVerticle] (версия x-eventloop-поток-6) gt;gt;gt;gt;gt;gt; фрукты 5678 2021-12-02 19:14:40 622 ИНФОРМАЦИЯ [org.byb.ver. DbTestVerticle] (vert.x-eventloop-поток-5) gt;gt;gt;gt;gt;gt; счет 2373 2021-12-02 19:14:40 622 ИНФОРМАЦИЯ [org.byb.ver. DbFruitVerticle] (vert.x-eventloop-поток-6) gt;gt;gt;gt;gt;gt; фрукты 5679 ` Спасибо!