Quarkus: блокировка метода службы grpc, работающего в цикле событий

Я реализую сервер gprc в quarkus (1.8.3.Final). Мой сервис написан в реактивном стиле (smallrye mutiny) Это мой класс обслуживания

@Singleton
@Blocking
@Slf4j
public class GrpcService extends MutinyGrpcServicesGrpc.GrpcServicesImplBase{

  @Blocking
  public Uni<MyResponse> executeMyLogic(MyRequest request) {
     System.out.println("grpc thread name "+Thread.currentThread().getName());
     ...
  }
}

Теперь фактическая логика написана внутри executeMyLogicявляется битовой блокировкой и приводил к блокировке предупреждений цикла событий (и некоторых других ошибок) с помощью vertx. Итак, как упоминалось в руководстве по серверу quarkus grpc (https://quarkus.io/guides/grpc-getting-started), я аннотировал метод с помощью @Blocking (io.smallrye.common.annotation.Blocking).

Прежде чем добавить эту аннотацию, я получил этот журнал на sys.outgrpc thread name vert.x-eventloop-thread-0что указывает на то, что эта логика выполняется в цикле событий vertx, который, по всей видимости, вызывает проблему.

Теперь, согласно моему пониманию, после добавления этой аннотации @Blocking в executeMyLogicэто должно выполняться в каком-то рабочем потоке. Но он все еще работает в цикле событий vertx.

Похоже, эта аннотация не соблюдается фреймворком.

Исправьте меня, если я неправильно понимаю, или, пожалуйста, помогите мне заставить это работать.

1 ответ

Как оказалось, это была ошибка в фреймворке quarkus. Ранее он не учитывал аннотацию @Blocking. Заработало после обновления до 1.10.2.Final

Вот ссылка на PR, который это исправил

Другие вопросы по тегам