我们有一个实现,其中消息被放置在AWS SQS队列上并被Camel AWS使用。我们正在使用concurrentConsumers = 1.我们正在记录队列的轮询,如org.apache.camel.component.aws.sqs.SqsConsumer所做。
测试包括向SQS(从远程系统)发送消息,然后记录消息在队列中的时间。在Camel端,我们在SqsConsumer类上进行了跟踪日志记录,我们可以看到轮询队列的时间以及消息被消耗的时间。
如果我们每10秒在队列中放置一条消息,那么Camel大多数时间会在1-2秒内收到消息。但是,有很多次它需要更长的时间(10秒以上)。
基本上我们看到了这种行为:
我们在没有Camel的情况下端到端地测试了SQS,并且吞吐量没有问题(几秒钟内就有1000条消息)。
我们用于此测试的Camel实现仅包括从SQS队列读取和记录 - 没有其他功能。
我们已经测试过改变了许多其他Camel SQS参数,但行为没有差异。
但是,如果我们使用concurrentConsumers = 10进行测试,例如,几乎立即从队列中拾取每条消息,延迟时间最短。
我的问题是为什么单个消费者不能及时收到消息?如果它真的是每500毫秒轮询一次,它怎么不“看到”并收到消息呢?
注意 - 由于我们的应用程序的功能,我们对使用concurrentConsumers所带来的多线程犹豫不决。
答案 0 :(得分:1)
根据@ketanvijayvargiya的建议,长期民意调查似乎确实是答案。由于你的评论,我们再看看它。有多种方法可以设置我们尝试过的值:
我们测试过(2)并且没有看到任何行为改变(在我发布时)。我们使用(1)再次测试并看到了改进。我们再次重新测试了(2)并且也看到了改进,所以我们只能假设在执行第一次测试时我们犯了一个错误。