问题描述
我有一个基于 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),但无济于事。
请帮忙。谢谢!
P.S.我不能在这里使用 TTL,只能使用我们的应用程序来完成。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)