【问题标题】:Message Scheduling/Consumption in JMS based on Defined TimeJMS中基于定义时间的消息调度/消费
【发布时间】:2013-07-12 05:45:11
【问题描述】:

我们使用 IBM WebSphere MQ 作为带有 Spring MDP(消息驱动 POJO)的 JMS 提供程序。

在 JMS 中有什么方法可以在消息中配置与时间相关的属性,以便只能在特定定义的时间使用消息?

例如,如果我将三个消息发送到队列 M1、M2 和 M3。在哪里,我可以配置 M2 消息属性,比如说凌晨 3 点。而消费者方面,消费者只能在凌晨 3 点选择这条消息。如果未定义时间,则应以 JMS Receiver 的方式使用消息。

【问题讨论】:

    标签: jms ibm-mq mdp


    【解决方案1】:

    JMS 2.0 规范定义了Delivery Delay。使用此功能,消息生产者可以指定在指定时间interval 之前不得传递消息。邮件将在指定时间后发送。但这可能对您没有帮助,因为您希望在指定时间消费一条消息。通常,消息传递应用程序设计为在消息传递提供程序提供消息后立即使用它们。

    【讨论】:

    • 是的,你是对的。这可能无法帮助我在指定时间使用消息。我不确定,是否有任何方法可以将 Quartz 调度概念与 JMS 集成。
    【解决方案2】:

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

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

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

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

    看看this

    【讨论】:

    • 感谢您的回复。我看到这种方法存在问题。如果我说应该在每天凌晨 3 点处理特定消息。使用这种方法,我可以定义消息选择器属性以在凌晨 3 点选择消息。甚至之前或之后都没有。现在,假设队列中有 10 条消息,并且所有消息的处理时间为凌晨 3 点。假设消费者在凌晨 3 点选择第一条消息,处理该消息需要 10 分钟。现在是凌晨 3.10 点。其他剩余消息定义为在凌晨 3 点处理。在这种情况下,消费者将永远不会选择其他消息,因为消费者端当前时间是 3.10 AM。
    • 您可以让 n 个读者在凌晨 3 点接收 n 封邮件。另一种方法是在凌晨 3 点处理开始之前读取与选择器匹配的所有消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2016-06-14
    • 2011-12-22
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多