如何处理错误 - SRMSG00034:发出项目的下游请求不足

ana*_*ray 8 quarkus smallrye-reactive-messaging

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

如果我将请求率提高到 300 请求/秒,则会出现以下错误。我试图了解错误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)
Run Code Online (Sandbox Code Playgroud)

小智 10

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

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

  1. 您可以更改发射器本身的溢出策略,例如,扩展缓冲区,甚至可以使用无界缓冲区(如果您的情况安全的话)
  2. 你检查一下为什么消耗被限制在 300 条消息/秒,这是相当低的