Quarkus EventBus requestandforget - 日志中出现超时错误

pri*_*ngi 4 quarkus

当尝试将Quarkus(版本 2.9.2.Final)EventBus requestAndForget@ConsumeEvent返回void的方法一起使用时,即使处理没有任何问题,日志中也会出现以下异常。

好的

2022-06-07 09:44:04,064 错误 [io.qua.mut.run.MutinyInfrastruct] (vert.x-eventloop-thread-1) Mutiny 必须放弃以下异常: (TIMEOUT,-1) 超时等待 30000(ms) 回复。地址:__vertx.reply.3,回复地址:receivedSomeEvent

消费者代码:

@ApplicationScoped
public class ConsumerManiac{
  @ConsumeEvent(value = "receivedSomeEvent")
  public void consume(SomeEvent someEvent ) {

    System.out.println("OK");
  }
}
Run Code Online (Sandbox Code Playgroud)

生产者代码(REST 端点):

public class SomeResource {
  private final EventBus eventBus;

  @Inject
  public SomeResource (EventBus eventBus) {

    this.eventBus = eventBus;
  }

  @POST
  public Response send(@Valid SomeEvent someEvent) {

    eventBus.requestAndForget("receivedSomeEvent", someEvent);

    return Response.accepted().build();
  }
}
Run Code Online (Sandbox Code Playgroud)

如果将消费者方法更改为返回某个值,则不会出现日志中的异常。

@ApplicationScoped
public class ConsumerManiac{
  @ConsumeEvent(value = "receivedSomeEvent")
  public String consume(SomeEvent someEvent ) {

    System.out.println("OK");

   return "ok";
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何缺失的代码片段丢失,因此不会发生异常(即使处理结束时没有任何问题)?

参考https ://quarkus.io/guides/reactive-event-bus#implementing-fire-and-forget-interactions

完整的堆栈跟踪:

2022-06-07 09:44:04,064 错误 [io.qua.mut.run.MutinyInfrastruct] (vert.x-eventloop-thread-1) Mutiny 必须放弃以下异常: (TIMEOUT,-1) 超时等待 30000(ms) 回复。地址:__vertx.reply.3,回复地址:在io.vertx.core.eventbus.impl.ReplyHandler.handle(ReplyHandler.java:76)处收到一些事件 在io.vertx.core.eventbus.impl.ReplyHandler.handle(ReplyHandler.java) :24)在io.vertx.core.impl.VertxImpl $InternalTimerHandler.handle(VertxImpl.java:893)在io.vertx.core.impl.VertxImpl $InternalTimerHandler.handle(VertxImpl.java:860)在io.vertx。 core.impl.EventLoopContext.emit(EventLoopContext.java:50) 在 io.vertx.core.impl.DuplicatedContext.emit(DuplicatedContext.java:168) 在 io.vertx.core.impl.AbstractContext.emit(AbstractContext.java: 53) 在 io.vertx.core.impl.VertxImpl$InternalTimerHandler.run(VertxImpl.java:883) 在 io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) 在 io.netty.util.concurrent .ScheduledFutureTask.run(ScheduledFutureTask.java:170)在io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)在io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:469)在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)在io.netty.util.concurrent.SingleThreadEventExecutor $4.run(SingleThreadEventExecutor.java:986)在io.netty.util.internal.ThreadExecutorMap $2。运行(ThreadExecutorMap.java:74)在io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)在java.base/java.lang.Thread.run(Thread.java:833)

小智 5

文档不正确。

请求期望得到响应。您想使用发送而不是请求。

请参阅https://github.com/quarkusio/quarkus/issues/31045