缓存和存储然后转发的最佳策略

时间:2014-03-18 04:43:56

标签: caching file-io concurrency activemq memory-mapped-files

JVM(客户端)通过ActiveMQ消息队列将大量事件数据发送到另一个JVM(服务器)。 ActiveMQ服务器嵌入在服务器JVM中。如果消息量太大,则客户端JVM需要将消息保留在本地内存高速缓存中,如果高速缓存溢出,则需要将消息保留在文件系统中。同时,另一个线程需要从文件/缓存中读取数据并将其发送到服务器jvm。 我的问题是:实现这个的最佳方法是什么?内存映射I / O会有帮助吗?我需要在本地文件进入服务器后删除它们。

1 个答案:

答案 0 :(得分:0)

我会尽量避免使用逻辑来缓存/持久化客户端上的消息,因为这样会使事情变得更复杂,并且您有点复制服务器中发生的相同功能。首先,您需要定义预期的最大音量,并检查AMQ是否可以处理该音量。尝试调整AMQ以处理高容量并使用其持久性功能,但所有这些都将在服务器上。

如果您丢失信息,您似乎并不在乎,因为您愿意将它们留在客户的记忆中。如果是这种情况,您可以优化AMQ中的某些内容以获得更好的吞吐量。以下是指南:

http://activemq.apache.org/performance-tuning.html

如果您仍然觉得需要在客户端缓存/保留邮件,我会看到以下选项:

  1. 自己动手(重新发明轮子)。
  2. 也在客户端嵌入AMQ代理。 AMQ代理客户端会将消息转发给AMQ代理服务器。
  3. 使用任何其他框架来处理客户端上的消息。 Akka框架可能对你有帮助,因为他们有durable mailboxes的演员。
  4. 我会去2或3做更多关于3的研究,以找到合适的框架。