3

我正在对 Quarkus 开发的一个简单应用程序进行负载测试。应用程序将 http 请求代理到另一个 http 服务。该应用程序使用org.eclipse.microprofile.reactive.messaging.Emitter和 o rg.eclipse.microprofile.reactive.messaging.Channel

如果我将请求速率推到 300 req/sec,我会遇到错误。我试图了解错误SRMSG00034:发出项目的下游请求不足以及如何解决它。任何帮助,将不胜感激。

2021-03-10 06:43:47,678 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-100) HTTP Request to /events failed, error id: cb6577a7-0cd6-4790-a5ea-5ccd73a088fc-289: java.lang.IllegalStateException: SRMSG00034: Insufficient downstream requests to emit item
    at io.smallrye.reactive.messaging.extension.ThrowingEmitter.emit(ThrowingEmitter.java:60)
    at io.smallrye.reactive.messaging.extension.AbstractEmitter.emit(AbstractEmitter.java:146)
    at io.smallrye.reactive.messaging.extension.EmitterImpl.send(EmitterImpl.java:29)
4

1 回答 1

4

因此,您正在使用发射器将消息推送到某处。发射器是一个异步结构,它有一个默认缓冲区来处理缓慢的消耗(请参阅https://quarkus.io/blog/reactive-messaging-emitter/)。在您的情况下,某处不够快或缓冲区不够大。

有几种方法可以解决此问题:

  1. 您可以更改发射器本身的溢出策略,例如,扩展缓冲区,如果在您的情况下是安全的,甚至可以使用无界缓冲区
  2. 您检查为什么消耗限制为 300 条消息/秒,这是相当低的
于 2021-04-20T11:38:46.513 回答