Apache camel Apache Camel未及时从SQS获取消息

Apache camel Apache Camel未及时从SQS获取消息,apache-camel,amazon-sqs,Apache Camel,Amazon Sqs,我们有一个实现,其中消息被放置在AWS SQS队列上,并被AWS使用。我们使用concurrentConsumers=1。我们正在记录由org.apache.camel.component.aws.sqs.SqsConsumer完成的队列轮询 测试包括(从远程系统)向SQS发送消息,然后记录消息在队列中的时间。在Camel端,我们在SqsConsumer类上有跟踪日志记录,我们可以看到何时轮询队列以及何时使用消息 如果我们每10秒在队列中放置一条消息,大多数情况下,Camel会在1-2秒内拾取消

我们有一个实现,其中消息被放置在AWS SQS队列上,并被AWS使用。我们使用concurrentConsumers=1。我们正在记录由org.apache.camel.component.aws.sqs.SqsConsumer完成的队列轮询

测试包括(从远程系统)向SQS发送消息,然后记录消息在队列中的时间。在Camel端,我们在SqsConsumer类上有跟踪日志记录,我们可以看到何时轮询队列以及何时使用消息

如果我们每10秒在队列中放置一条消息,大多数情况下,Camel会在1-2秒内拾取消息。但是,在很多情况下,这需要更长的时间(10秒以上)

基本上我们看到这种行为:

  • (远程)在SQS上放置消息
  • (骆驼)投票
  • (骆驼)投票
  • (骆驼)投票
  • 。。。(对于许多轮询,默认间隔为500毫秒)
  • (驼峰)从SQS接收消息
我们已经在没有Camel的情况下对SQS进行了端到端测试,吞吐量没有问题(几秒钟内有1000条消息)

我们针对该测试的Camel实现只包括从SQS队列读取和日志记录,没有其他功能

我们已经通过改变许多其他Camel SQS参数进行了测试,在行为上没有差异

但是,例如,如果我们使用concurrentConsumers=10进行测试,则几乎可以立即从队列中提取每条消息,并且延迟最小

我的问题是,为什么单一消费者不能及时接收信息?如果它真的是每500毫秒轮询一次,它怎么就不会“看到”并拾取消息呢


注意-由于我们应用程序的功能性,我们在启用concurrentConsumers附带的多线程方面犹豫不决。

正如@ketanvijayvargiya所建议的,长轮询似乎确实是答案。因为你的评论,我们再看一眼。有多种方法可以设置我们尝试的值:

  • 通过SQS URI上的camel本身,receiveMessageWaitTimeSeconds=
  • 在AWS SQS队列本身上设置它(在控制台上,配置队列->接收消息等待时间)

  • 我们已经测试了(2),没有发现任何行为改变(在我发帖时)。我们使用(1)再次测试,并看到了改进。我们再次使用(2)进行了测试,并看到了改进,因此我们只能假设在执行第一次测试时我们犯了错误。

    您是否尝试了长轮询?@ketanvijayvargiya是的,但行为似乎相同。感谢您分享您关于如何克服从队列中轮询消息的延迟的发现。我们在单一消费者(concurrentConsumers)方面也面临同样的问题,我们将尝试长轮询路线。