Java中的通用QoS消息批处理和压缩

时间:2010-09-02 19:11:24

标签: java networking messaging qos batching

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

本质:

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

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

是否有建立基本QoS批处理/限制/压缩实现的良好开源示例?

1 个答案:

答案 0 :(得分:0)

我们正在使用一种非常类似的高负荷机制。

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

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