【问题标题】:Retrieving contents inside JMS Queue for within specific time inteval在特定时间间隔内检索 JMS 队列中的内容
【发布时间】:2014-04-19 08:01:44
【问题描述】:

我需要创建一个应用程序,其中我必须在给定的时间限制内检索 JMS 队列中的所有元素。

例如,给定的限制是 10 秒。所以每隔 10 秒,应用程序应该创建一个新的Thread,其中Thread 负责 1) 连接到 JMS 队列和 2) 在连接期间检索所有消息。

所以在 10 秒内,假设队列中有 15 个TextMessages。我只希望当前执行线程检索这 15 个TextMessages,仅此而已。恐怕线程会收到额外的消息。

是否有限制消费者可以接收多少消息的工具?也许有什么功能可以让我看到队列包含多少?

【问题讨论】:

    标签: java multithreading jms


    【解决方案1】:

    我能想到的一种方法是从使用CLIENT_ACKNOWLEDGE 确认模式的会话中创建接收器。现在启动接收器并接收消息。是的,您会收到一些额外的消息。现在,当您收到一条消息时,获取它JMSTimestamp 并查看它是否属于您的线程感兴趣的持续时间。如果消息符合您的时间要求,请确认它。如果不确认,则在这种情况下它将持续存在于服务器上,并且可能会被其他线程拾取,以寻找具有不同时间戳的消息。

    另一种有效的方法是使用消息选择器。由于JMSTimestamp 是一个消息头并且可以在选择器中使用,您可以利用它。根据您的时间范围要求,在JMSTimestamp 上使用选择器创建接收器。只有满足选择器的消息才会被接收。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多