当前位置: 首页 > 知识库问答 >
问题:

WebSphere中的JMS队列优先级问题

艾璞瑜
2023-03-14

要求:我需要我的消息驱动bean(MDB)能够从四个不同的JMS队列中读取消息,MDB应该根据队列的优先级读取消息。

我有4个JMS队列A、B、C和D,优先级分别为8(最高)、7、6和5。因此,如果队列C中有500条消息,而队列A和B是空的。我的MDB应该使用来自队列C的消息。但是当我在高优先级队列(A或B)中收到消息时,我的MDB应该停止从C读取消息,并从高优先级队列中消耗消息(直到队列是空的),然后继续从低优先级队列中消耗消息。

设置完成:我正在使用WebSphere7.0,并在管理控制台中正确设置了JMS队列的优先级。

高级性能

*优先级:指定

指定优先级:8*

问题:但我的MDB仍然无法按预期读取。要达到我的要求还需要什么配置。

请做需要的事。提前谢谢。

共有2个答案

田硕
2023-03-14

对于您的场景,您只需要一个队列,并将具有不同优先级的消息放入队列。MDB将根据优先级读取消息。不要在WebSphere中的队列设置中设置任何优先级,但应用程序在将消息放入队列时必须正确设置优先级。MDB只能在单个队列上侦听。

南门鸿哲
2023-03-14

MDB在任何时候都只能从单个队列中驱动。来自该队列的消息将按优先级顺序被消耗。如果在发送消息时没有给出优先级,则队列上设置的优先级是消息的默认优先级。

因此,不可能让MDB在一组队列之间移动。

如果您希望单个消费者始终获得最高优先级的消息,则需要一个队列和一个MDB。或者创建多个队列,并在其中拆分消息——不同的MDB处理不同的优先级

 类似资料:
  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我试图实现Dijkstra算法的一个版本,以找到公共汽车从起点到终点的最短路线。不幸的是,我似乎找不到swift提供优先级队列类型的库或其他方式,所以我似乎必须自己编写代码。 话虽如此,有人能指出我做这件事的正确方向吗? 目前我的想法如下: 到目前为止这是我的代码。似乎太短太残忍了...我一定是在概念上漏掉了什么。

  • 有人能帮我找到我的PQ的问题吗?

  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。

  • 优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优