我们使用的是 JBOSS 5.1.0,我们使用主题来存储我们的消息。我们的客户正在进行持久订阅以获取这些消息。
一切正常,但一个问题是我们正在从 TCP 客户端获取数据,我们正在处理并将其保存在主题中,它每秒发送大约 10 条消息,而我们的客户端一次读取一条消息。这之间有一个巨大的差距,一段时间后,JBOSS 主题有很多消息并且它崩溃说内存不足。是否有任何解决方法。
基本上,生产者产生的消息比消费者可以处理的多 10 倍。如果这种情况稳定(不仅在高峰期),这将永远不会奏效。
如果你限制生产者每秒只发送一条消息(这当然是可能的,例如 check out RateLimiter
),你将如何处理生产者端的额外消息?如果他们没有在主题中排队,他们将在生产者端排队。
你有几个选择:
以某种方式调整您的消费者以更快地处理消息,因此主题永远不会被填满
调整主题以使用持久存储。这要好得多。不仅主题不会将所有内容存储在内存中,而且您可能还会获得事务行为(消息是持久的)
将要设置为主题的消息队列放入并每秒处理一条消息。该队列必须是持久的,并且必须能够保留比当前主题更多的消息