限制从jms队列读取的时间

时间:2014-10-29 08:28:43

标签: java-ee jms activemq message-listener

我有以下设置:

  • 外部应用程序写入jms队列
  • jms队列也是外部的,所以这里没有配置
  • 使用ActiveMQ在Glassfish上运行的现有应用程序将服务器连接到jms队列
  • 现有的应用程序是一个MessageDriven bean,它实现了MessageListener接口(当前将消息放入队列时处理它们)
  • 新要求说明邮件只能在02:00到04:00的时间范围内处理

如何最好地限制MessageListener仅在时间范围内处理队列中的消息?

我不希望在MessageListener中检查当前系统时间与时间范围。如果消息没有在时间范围之外从队列中删除,那将是件好事。

由于

1 个答案:

答案 0 :(得分:0)

您需要在应用程序逻辑中控制它。

根据MessageListener的实现方式,可以停止/统计它。如果您无法做到这一点,那么移动到信息接收器将是您最好的选择,因为您可以轻松选择何时使用该信息。

如果这些都不起作用,您可以随时选择其他ack模式或使用JMS转换。使用消息时,您可以决定是否要在onMessage方法中完全处理消息。如果它不在当前时间范围内,您可以选择拒绝该消息,甚至可以保持该消息,直到您可以处理它然后确认或提交。

如果您选择立即拒绝,则需要确保有一个重试逻辑,允许您不断尝试相同的消息。