Apache Camel没有及时从SQS获取消息

时间:2017-02-02 00:50:34

标签: apache-camel amazon-sqs

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

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

如果我们每10秒在队列中放置一条消息,那么Camel大多数时间会在1-2秒内收到消息。但是,有很多次它需要更长的时间(10秒以上)。

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

  • (远程)在SQS上发送消息
  • (Camel)民意调查
  • (CAMEL)轮询
  • (CAMEL)轮询
  • ...(对于许多民意调查,默认为500毫秒)
  • (Camel)从SQS收到消息

我们在没有Camel的情况下端到端地测试了SQS,并且吞吐量没有问题(几秒钟内就有1000条消息)。

我们用于此测试的Camel实现仅包括从SQS队列读取和记录 - 没有其他功能。

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

但是,如果我们使用concurrentConsumers = 10进行测试,例如,几乎立即从队列中拾取每条消息,延迟时间最短。

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

注意 - 由于我们的应用程序的功能,我们对使用concurrentConsumers所带来的多线程犹豫不决。

1 个答案:

答案 0 :(得分:1)

根据@ketanvijayvargiya的建议,长期民意调查似乎确实是答案。由于你的评论,我们再看看它。有多种方法可以设置我们尝试过的值:

  1. 通过骆驼本身在SQS URI上,?receiveMessageWaitTimeSeconds =
  2. 在AWS SQS队列本身上设置它(在控制台上,配置队列 - >接收消息等待时间)。
  3. 我们测试过(2)并且没有看到任何行为改变(在我发布时)。我们使用(1)再次测试并看到了改进。我们再次重新测试了(2)并且也看到了改进,所以我们只能假设在执行第一次测试时我们犯了一个错误。