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