当前位置: 首页 > 知识库问答 >
问题:

限制从jms队列读取的时间

相德宇
2023-03-14

我有以下设置:

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

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

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

谢啦

共有1个答案

花品
2023-03-14

您需要在应用程序逻辑中对此进行控制。

根据MessageListener的实现方式,可以停止/统计它。如果这对您来说是不可能的,那么移动到消息接收器将是您的最佳选择,因为您可以轻松选择何时使用消息。

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

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

 类似资料:
  • 我在Weblogic 12c上部署了一个MDB,它从JMS队列(UDQ)读取消息。MDB正在读取消息,但它没有从JMS队列中删除,这导致消息被重复读取。所以,我想知道MDB何时确认JMS队列它成功读取了消息,并且队列应该删除该消息。

  • 我有一个java客户机,它在队列中发送jms消息(“队列请求”)。该消息包含一个int属性(“id”),其中包含唯一的客户端id号。消息正在处理中,然后进入另一个队列(“队列响应”)。如何让客户机等到具有其id的消息在队列中,然后读取它。我曾尝试使用侦听器并实现onMessage,但当收到消息时,我如何停止侦听?

  • 我有Weblogic 12.1.2和IBM WebSphere MQ Explorer 7.5.0.2。 在Weblogic中,我创建了: JMS服务器 我有一个JAVA程序,可以向这个队列发送消息。 我想使用MQ Explorer来读取来自此队列的消息。我如何设置它?我应该在MQ Explorer中做什么和如何设置,以连接到此队列?有人能给我一个Web链接吗?我找不到任何有用的东西,但也许我想错

  • 我想创建一个异步读取kafka消息的流,并使用队列通道累积大量要处理的消息,并且只有在处理完这些消息(例如50条消息)后,它才能处理另外50条消息,或者在释放队列中的空间时。我尝试使用一个从kafka委托读取到另一个流的流,该流具有一个带有PollerMetadata(Pollers.fixedDelay(500))的QueueChannel。maxMessagesPerPoll(50))但是轮询

  • 要求:我们需要从JMS队列(由另一个应用程序发布)中检索一条消息,并将该消息持久保存在我们的JMS队列中。需要整个流是事务性的,所以如果消息不能持久化到下游JMS队列中,则不应该确认从上游JMS队列接收到的消息。我的配置如下 在这种情况下,我需要使用JmsTransactionManager,还是应该高于配置就足够了。我们可以处理重复的消息,所以我相信我们不需要XA事务。

  • 我找到以下链接来读取JMS队列中的消息及其工作。 https://blogs.oracle.com/soaproactive/entry/jms_step_3_using_the 现在,我想以编程方式读取JMS队列统计信息,如消息数、挂起消息数和消息输入/输出时间等。weblogic或weblogic中是否有可能为此提供任何API? 请帮忙。