我没有在Camel配置中显式指定可见性超时,因此每个读取的消息都被赋予30s的可见性超时,这在队列配置中指定。
处理时间短的消息工作正常,但对于持续时间长的消息,Apache Camel在完成处理后不会删除消息。因此消息再次在队列中可用,Camel再次读取消息,长时间处理它,重复这个循环。
我知道消息重新出现在队列中是因为可见性超时很低,但我担心的是-
1.为什么Camel不在处理完这些长时间运行的作业后立即删除消息?
2。短作业的消息被正确删除(即使短的运行作业超过了30秒的可见性超时)
任何地方都没有发生错误或异常。
我甚至做了一个示例POC作业,它除了等待很长时间(85分钟)然后打印成功消息之外什么也不做。我注意到作业成功完成,但是Camel没有删除消息。为什么?
我使用Camel中的配置选项-'Extend MessageVisibility'修复了这个问题。当我们将此选项设置为true时,Camel将运行一个后台任务,该任务不断延长消息的可见性超时,直到它被使用者处理。
同样,我真正的问题不是消息再次在队列中可见,而是Camel使用者没有删除它。
但是,根据我的观察,我发现应用extendMessageVisibility选项会导致Camel跟踪消息,然后正确地删除它。
String queueUri = "aws-sqs://" + queueName + "?amazonSQSClient=#client&extendMessageVisibility=true&visibilityTimeout=60";
应用程序有一个JMS队列负责交付审计日志。应用程序将日志发送到JMS队列,该队列由MDB使用。 但是,发送的消息是大 XML 文件,大小从 20 MB 到 100 MB 不等。问题在于 JMS 队列使用消息的时间太长,从而导致内存不足错误。 我应该怎么做才能解决这个问题?
MessageProducer.java public void sendMessage(最终字符串responseStream){ SampleJMSConsumer.java
这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无
但我的却不是这样。他们正在处理OK,并将正在编码的视频保存到正确的S3存储桶中。但它们没有像应该的那样删除队列项。 我试过用各种方法发送报头,包括... 我在页面上没有输出,但尝试调用了ob_start();在起始和ob_end_flush()处;在发送报头之后,甚至尝试在任何处理之前一开始就直接执行报头。没有任何工作,消息仍然在飞行中,并在其可见性超时结束后重新传递。 救命啊! 多谢了。
我最近将一台服务器从ActiveMQ从5.8升级到了最新版本(5.11.1)。从那以后,我偶尔注意到,消息将在特定队列中累积,而不会被删除。 我们的架构有一个生产者,一个消费者。我可以看到消费者仍然保持联系,但制作人的信息越来越多。我的解决方案是通过web控制台删除队列。之后,我立即看到消费者重新连接,消息再次开始处理。 如果相关,在这种情况下,生产者正在运行NMS。NET和消费者在Java 1.
我将与一起使用中的这个库。所有使用者均为,所有队列均为(4小时)。 我有很多队列没有任何挂起的ack,但仍然保存着数百条消息。此外,队列不会在应该过期时过期,这将在几天后产生性能问题。我没有找到任何理由来解释为什么消息在ack处理之后仍然在队列中。 谢谢 管理工具中的一些快照: