首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定代码的优先级以查看3个不同的队列

如何确定代码的优先级以查看3个不同的队列
EN

Stack Overflow用户
提问于 2016-02-03 12:23:45
回答 3查看 59关注 0票数 1

我们有一个要求,我们将有3个不同的队列中的消息。

我需要编写代码,使来自队列A的消息具有比队列B更高的优先级,然后是队列C。

但是,我不能让任何队列等待太长时间,所以每个线程都应该有一些专用的接收器。

你能为我推荐任何现有的框架来做这件事吗?

一种可能的解决方案是增加队列A的专用接收器的数量,如果队列A中没有消息,则这些接收器也会查看B和C。

队列B的专用接收器的数量略少,如果B中没有消息,这些接收器也会查看A和C。

队列C的很少的专用接收器,如果C中没有消息,它们也会查看A和B。

有没有可能在JMS消费者/接收者级别实现这个解决方案,或者我需要为它编写自定义代码?

EN

回答 3

Stack Overflow用户

发布于 2016-02-03 14:33:19

JMS无法控制消息处理的优先级。我建议将每个消息转换为任务(在消息到达时立即转换),并将任务提交给优先执行程序。请参阅Java Executors: how can I set task priority?

票数 0
EN

Stack Overflow用户

发布于 2016-02-03 23:52:31

如果您控制队列(如中所示,编写代码可以具有您提供的队列引用),则可以放置一个PriorityBlockingQueue,并使用一个对A、B、C进行排序的比较器。

然而,您不能全速旋转,必须等待,所以我认为您应该在A队列上使用(超时),只要您的最小响应时间允许服务于B和C队列(如果A始终具有优先级,这将是很大的)。当然,只有在B和C队列为空的情况下才调用A.take() (但如果不知道队列实现,就不要依赖.size();只需信任您刚刚尝试的最后一个poll()结果)。

当然,您可以将3个线程简单地放入一个由您控制的优先级队列中。但这有点言过其实了。

票数 0
EN

Stack Overflow用户

发布于 2016-02-04 08:33:05

在JMS消息上使用JMSPriority属性,将消息转储到同一队列中,并让提供程序进行优先级排序工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35168486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档