JMS 优先级消息导致低优先级消息匮乏



我有一个全天加载高优先级JMS消息的队列,我想快速将它们赶出门。 队列还会定期大批量加载优先级较低的消息。 我在繁忙的日子里看到的问题是,队列前面总是有足够的高优先级消息,在该数量下降之前,不会选择任何低优先级的消息。 他们通常会排到半夜。 该应用程序分布在许多服务器上,但CPU甚至没有呼吸困难,JMS似乎是关键点。

我的预感是实现某种老化算法,以增加队列中已经存在很长时间的消息的优先级,但当然,这是中间件应该为我做的。 我无法想象JMS提供者(IBM WebsphereMQ(或应用程序服务器(TIBCO BusinessWorks(没有某种工具来解决这个问题。 所以在我写一些代码之前,我想我会问,有没有办法让这些技术中的任何一种来帮助我解决这个问题?

正在读取队列的 BusinessWorks 活动是 JMS SOAP 事件源,但我可以将其转换为 JMS 队列接收器活动或其他活动。

欢迎所有关于如何解决这个问题的想法:-(蒂亚

这就像把一只手绑在背后,然后抱怨你不能正常游泳。哎呀! 首先,谁的好主意是混合消息。 仅仅因为您可以做某事并不意味着您应该这样做。

该应用程序分布在多个服务器上,但 CPU 不是 即使呼吸困难,JMS似乎也是关键点。

那么,解决方案很容易。 将高优先级消息放入队列"A"(现有队列(,将低优先级消息放入新队列"B"。 接下来,启动 JMS 应用程序的另一个实例以读取队列"B"中的消息。

此外,JMS可能不是瓶颈。 这是在JMS层拾取需要很长时间(即后端工作(的消息后,应用程序对消息数据所做的。

最后,有多少个 JMS 应用程序的实例正在针对现有队列运行? 如果您只运行 1 个实例,为什么? 如果您有很多 CPU 容量,那么为什么不运行 JMS 应用程序的 10 个实例。 对消息进行一些真正的并行处理。

如果您真的想将消息混合在同一队列中并首先处理高优先级消息,但您的消息量如此之大,以至于您有时直到半夜才能处理所有消息量,那么您根本没有足够的处理应用程序。MQ是一个并行处理系统,它旨在允许许多应用程序同时从队列中放入或获取。通过同时运行更多获取应用程序来利用这一点。他们将更快地处理您的高优先级消息,然后返回处理低优先级消息。

从您的描述中可以清楚地看出您希望首先处理高优先级消息。在这种情况下,优先级较低的消息将不得不等待。

如果消息长时间

处于队列中,MQ 不会增加消息的优先级。它如何知道它必须更改消息的属性:)?您将需要开发一个应用程序来执行此操作。

我认为根据优先级隔离消息,例如,高优先级消息被放入

一个队列,而低优先级消息被放入另一个队列可能是您可以查看的一种选择。

第二种选择是考虑将交付顺序(MSGDLVSQ(更改为FIFO。这使得消息按照它们到达队列的顺序传递给消费者。但请注意,这将忽略消息优先级,这意味着如果有一个较低优先级的消息后跟一个较高优先级的消息,那么优先级较高的消息将等待,直到传递优先级较低的消息。

最新更新