0

问题:

处理积压的消息,其中每条消息具有三个标头“服务”、“客户端”和“流”。我想以最大并发处理积压的消息,但我有一些要求:

  • 一次只能处理 10 条具有相同服务的消息。
  • 一次只能处理具有相同服务和客户端的 4 条消息。
  • 具有相同服务和客户端和流的所有消息必须保持有序。

附加信息:

我一直在 ServiceMix(Camel + ActiveMQ)上下文中使用“maxConcurrentConsumers”和“JMSXGroupID”,我似乎能够满足我的 3 个要求中的 2 个。

例如,如果我做一些基于内容的路由将积压工作拆分为单独的“服务”队列(每个服务一个队列),那么我可以将 JMSXGroupID 设置为(服务 + 客户端 + 流),并设置 maxConcurrentConsumers=10在从每个队列消耗的路线上。这解决了第一个和最后一个要求,但是我可能有太多消息同时用于同一个客户端处理。

请注意,如果一个解决方案需要为服务+客户端的每个组合使用单独的队列和路由,那将变得难以管理,因为可能有成千上万的组合。

非常感谢任何反馈!如果我的问题不清楚,请随时建议我如何改进它。

4

1 回答 1

0

据我所知,如果你有 10k+ 连击,这将很难实现。

您可以通过使用消费者和选择器来绕过每个服务/客户端组合的一个队列。但是,如果您无法以某种方式预测一组有限的服务/客户端一次处于活动状态,那么这几乎同样难以处理(您根本不会创建 10k+ 选择器消费者而没有受到伤害并且没有重要的性能考虑)。

你能详细说明第二个要求吗?您是否需要它来确保您的客户之间存在某种公平感?请详细说明,如果我能想到其他内容,我会更新。

更新:您可以浏览队列,循环浏览消息并选择“有空闲插槽”的消息,而不是仅仅通过收听消息来消费。假设您在单个实例中运行,您可能可以弄清楚某些共享变量是否已达到限制。

于 2013-01-06T20:28:48.107 回答