JMS中基于定义时间的消息调度/消耗

JMS中基于定义时间的消息调度/消耗,jms,ibm-mq,mdp,Jms,Ibm Mq,Mdp,我们使用IBMWebSphereMQ作为SpringMDP(消息驱动POJO)的JMS提供程序 在JMS中是否有任何方法可以在消息中配置与时间相关的属性,以便只在特定定义的时间使用消息 例如,如果我正在向队列M1、M2和M3发送三条消息。其中,我可以配置M2消息属性,比如说凌晨3点。消费者方面,消费者只能在凌晨3点选择此消息。如果未定义时间,则消息应该以JMS接收方的方式使用。JMS 2.0规范定义了传递延迟。使用此功能,消息生成器可以指定在指定的时间间隔之后才能传递消息。邮件将在指定的时间后送

我们使用IBMWebSphereMQ作为SpringMDP(消息驱动POJO)的JMS提供程序

在JMS中是否有任何方法可以在消息中配置与时间相关的属性,以便只在特定定义的时间使用消息


例如,如果我正在向队列M1、M2和M3发送三条消息。其中,我可以配置M2消息属性,比如说凌晨3点。消费者方面,消费者只能在凌晨3点选择此消息。如果未定义时间,则消息应该以JMS接收方的方式使用。

JMS 2.0规范定义了
传递延迟。使用此功能,消息生成器可以指定在指定的时间间隔之后才能传递消息。邮件将在指定的时间后送达。但这可能对您没有帮助,因为您希望在指定的时间使用消息。通常,消息传递应用程序设计为在消息传递提供程序提供消息后立即使用消息。

如果您只想在指定时间处理消息,可以创建另一个队列“queue_3am”,并将读卡器安排为恰好在凌晨3点运行

一种变体是将时间戳设置为消息属性。因此,一个队列可以包含在不同时间点处理的消息。读者只能使用消息选择器获取相关消息

但是您应该通过添加两个时间戳作为消息属性来使用“消息拾取时间段”,例如,请将窗口设置为1或5分钟

接收方可以使用消息选择器:选择器是使用消息属性的条件


查看

谢谢您的回复。我认为这种方法有问题。如果我说一条特殊的信息应该在每天凌晨3点处理。通过这种方法,我可以定义MessageSelector属性来在凌晨3点拾取消息。甚至在之前或之后都没有。现在,假设队列中有10条消息,并且所有消息的处理时间都是凌晨3点。假设消费者在凌晨3点拾取第一条消息,处理该消息需要10分钟。现在是凌晨3点10分。其他剩余消息定义在凌晨3点处理。在这种情况下,消费者将永远不会拾取其他消息,因为消费者端当前时间为凌晨3.10点。您可以有n个读卡器在凌晨3点拾取n条消息。另一种方法是在凌晨3点开始处理之前读取与选择器匹配的所有消息。是的,您是对的。这可能无法帮助我在指定时间使用消息。我不确定是否有任何方法可以将Quartz调度概念与JMS集成。