【发布时间】:2012-11-06 22:02:55
【问题描述】:
相对于队列深度n,在使用队列中的消息时应用 JMS 选择器的算法时间复杂度是多少?特别是,每次读取是否为线性 (O(n))?它是否依赖于实现(取决于 JMS 提供者),是否依赖于请求的字段?
(如果依赖于实现,我对 Websphere MQ 和 Solace 的行为特别感兴趣,但我欢迎针对任何特定 JMS 提供者的回答,特别是如果您有描述复杂性的文档链接!)。
动机:每条消息都有两个属性:invocationID 和 batchName。一个批处理由多个调用组成。客户希望以两种方式之一来消费消息;通过invocationID 或batchName。在产生消息的那一刻,我不知道它们将通过哪种方法被消耗。
这可以通过选择器来实现:
invocationID=42
或者
batchName="reconciliation"
...我可以通过使用相关 ID 而不是自定义属性来加快其中一个速度,但我担心另一个会保持缓慢。
【问题讨论】:
-
好问题!我怀疑这很难得到一个好的答案,但显然对于做出某些架构决策至关重要。