2

我们有一个用 Java 编写的自定义消息传递系统,我想实现一个基本的批处理/压缩功能,基本上在重负载下它会将一堆推送响应聚合成一个推送响应。

本质上:

  • 如果我们检测到过去一秒内发送了 3 条消息,则开始批处理响应并安排一个计时器在 5 秒内触发
  • 计时器会将接下来 5 秒内收到的所有消息响应聚合成一条消息

在我只是在 Java 中寻找最好的例子之前,我确信这已经实现了。我不是在寻找一个完整的消息传递层,只是每秒检测基本消息并安排一些任务(显然我可以自己轻松编写这个我只是想将它与任何现有算法进行比较以确保我不会错过任何边缘情况或我已尽可能简化问题)。

是否有构建基本 QoS 批处理/节流/压缩实现的好的开源示例?

4

1 回答 1

0

我们正在使用非常相似的机制来处理高负载。

它会像你描述的那样工作 * 在给定的时间间隔内聚合消息 * 之后发送一个列表而不是单个消息。* 再次开始聚合。

您应该注意以下陷阱: * 如果您使用像 JMS 这样的事务处理消息传递系统,您可能会遇到麻烦,因为您的实现将无法在 JMS 事务内部发送,因此它会继续聚合。根据保存消息的数据结构的大小,这可能会耗尽空间。如果您有很长的事务发送许多消息,这可能会造成问题。* 以这种方式发送消息将异步发生,因为不同的线程将发送消息,而调用 send() 方法的线程只会将其放入数据结构中。* 坚持使用 JMS 示例,您应该记住,他们使用消息的方式也会被这种方法改变。因为您将从 JMS 接收到的消息列表作为单个消息。因此,一旦您提交了这条 JMS 消息,您就提交了整个消息列表。您应该检查这是否符合您的要求。

于 2011-03-24T11:13:42.497 回答