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