我们将IBM WebSphere MQ用作Spring MDP(消息驱动的POJO)的JMS提供程序。基于定义时间的JMS消息调度/消耗
在JMS中,我们可以在消息中配置与时间相关的属性,以便消息只能在特定的定义时间消耗吗?
例如,如果我发送三条消息到队列M1,M2和M3。在哪里,我可以配置M2消息属性,比如说3 AM。而消费者方面,消费者只能在凌晨3点选择此消息。如果没有定义时间,消息应该以JMS Receiver的方式消耗。
我们将IBM WebSphere MQ用作Spring MDP(消息驱动的POJO)的JMS提供程序。基于定义时间的JMS消息调度/消耗
在JMS中,我们可以在消息中配置与时间相关的属性,以便消息只能在特定的定义时间消耗吗?
例如,如果我发送三条消息到队列M1,M2和M3。在哪里,我可以配置M2消息属性,比如说3 AM。而消费者方面,消费者只能在凌晨3点选择此消息。如果没有定义时间,消息应该以JMS Receiver的方式消耗。
JMS 2.0规范定义了Delivery Delay
。使用此功能,消息生产者可以指定消息必须在指定时间interval
之后才能发送。该消息将在指定时间后提供。但是这可能无助于你,因为你想要在特定的时间消费消息。通常,消息传递应用程序被设计为在消息传递提供者可用时立即使用消息。
如果您只想在指定时间处理消息,则可以创建另一个队列“queue_3am”,并安排读者在凌晨3点准时运行。
一种变体是将时间戳设置为消息属性。因此,一个队列可能包含要在不同时间点处理的消息。读者可以使用消息选择器来获取相关消息。
但是你应该通过添加两个时间戳作为消息属性使用“消息拾取时限”,对于eaxmple设置窗口,以1分钟或5分钟。
接收方可以使用消息选择器:选择器是使用消息属性的条件。
看一看this
感谢您的回复。我看到这种方法的问题。如果我说每天上午3点应该处理一个特定的信息。通过这种方法,我可以定义消息选择器属性以在3AM选择消息。甚至没有之前或之后。现在,假设队列中有10条消息,并且所有消息的处理时间都是3AM。假设消费者在凌晨3点选择第一条消息,并且需要10分钟来处理消息。现在是上午3点10分。其他剩余消息定义为在凌晨3点进行处理。在这种情况下,消费者不会选择其他消息,因为消费者当前时间是3.10 AM。 –
您可以让* n *读者在凌晨3点接收* n *个消息。另一种方法是在*处理开始之前在凌晨3点*处读取与选择器匹配的所有消息。 – Beryllium
是的,你说得对。这可能不会帮助我在指定的时间消费一条消息。我不确定,是否有任何方法将Quartz Scheduling概念与JMS集成。 –