我有一个基于 Spring Boot 的 Java 应用程序,它使用javax.jms从 Solace 队列(比如说 A )读取消息。然后我的应用程序分别对每条消息应用 10 秒延迟(使用 DelayedQueue)。一旦 10 秒过去了,我将消息推送到另一个 Solace 队列(比如说 B)。一切正常,即使队列 A 中的初始消息较少,我也可以为每条消息设置适当的 10 秒延迟。
但是对我来说挑战是,如果队列 A 中有大量消息(通常发生在我的用例中),并且当我启动应用程序时,它会非常快地提取消息(每秒 10-15K 条消息)。这使我的应用程序内存不足(超出了 GC 开销限制)。
问题:我的问题是如何在我的应用程序中减慢消费速度。我们是否有一种方法可以让我每秒收到大约 2-3K 条消息。我需要在我的代码中做一些配置更改吗?请指教。
以下是我尝试的设置,它没有帮助。即使在此之后,我的应用程序每秒也会提取 12-15K 条消息:
environment.put(SupportedProperty.SOLACE_JMS_CONSUMER_DEFAULT_FLOW_CONGESTION_LIMIT, 2000);
environment.put(SupportedProperty.SOLACE_JMS_CONSUMER_DISPATCHER_QUEUE_SIZE, 2000);
即使我尝试增加堆内存(初始:2GB 和最大:4GB),但它没有帮助。
请帮忙。谢谢!
PS我不能在这里使用 TTL,只能使用我们的应用程序来完成。