我们使用 IBM WebSphere MQ 作为带有 Spring MDP(消息驱动 POJO)的 JMS 提供者。
JMS 中是否有任何方法可以在消息中配置与时间相关的属性,以便只能在特定定义的时间使用消息?
例如,如果我将三个消息发送到队列 M1、M2 和 M3。在哪里,我可以配置 M2 消息属性,比如说凌晨 3 点。而消费者方面,消费者只能在凌晨 3 点选择这条消息。如果未定义时间,则应以 JMS Receiver 的方式使用消息。
JMS 2.0 规范定义了Delivery Delay
. 使用此功能,消息生产者可以指定在指定时间之前不得传递消息interval
。邮件将在指定时间后发送。但这可能对您没有帮助,因为您希望在指定时间消费一条消息。通常,消息传递应用程序设计为在消息传递提供程序提供消息时立即使用它们。
如果您只想在指定时间处理消息,您可以创建另一个队列“queue_3am”,并安排阅读器在凌晨 3 点准确运行。
一种变体是将时间戳设置为消息属性。因此,一个队列可以包含要在不同时间点处理的消息。读者可以使用消息选择器仅获取相关消息。
但是您应该通过添加两个时间戳作为消息属性来使用“消息接收时间范围”,例如将窗口设置为 1 或 5 分钟。
接收者可以使用消息选择器:选择器是使用消息属性的条件。
看看这个