Amazon web services Spring cloud SQS-轮询间隔
使用spring cloud侦听AWS SQS队列,如下所示:Amazon web services Spring cloud SQS-轮询间隔,amazon-web-services,message-queue,aws-sdk,amazon-sqs,spring-cloud,Amazon Web Services,Message Queue,Aws Sdk,Amazon Sqs,Spring Cloud,使用spring cloud侦听AWS SQS队列,如下所示: @SqsListener(value = "${queue.name}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS) public void queueListener(String message, @Headers Map<String, Object> sqsHeaders) { // code } 这个很好用 配置了10个线程来处理SQS
@SqsListener(value = "${queue.name}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void queueListener(String message, @Headers Map<String, Object> sqsHeaders) {
// code
}
这个很好用
配置了10个线程来处理SQS客户机中的这些消息,正如您可以看到上面的代码。这也很好,在任何时间点最多处理10条消息
问题是,我无法找到控制轮询间隔的方法。默认情况下,所有线程空闲后,spring将进行轮询
即考虑下面的例子
你知道我们如何控制这次投票吗?i、 e.如果有任何线程可用,则应开始轮询,而不应等到所有线程都可用时才开始轮询。您的侦听器可以将消息加载到您的Spring应用程序中,并将其与
确认
和可见性
对象一起提交到另一个线程池(如果您想同时控制这两个对象)
消息提交到此线程池后,侦听器可以加载更多数据。您可以通过调整线程池设置来控制并发性
您的侦听器的方法签名类似于以下签名:
@SqsListener(value = "${queueName}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(YourCustomPOJO pojo,
@Headers Map<String, Object> headers,
Acknowledgment acknowledgment,
Visibility visibility) throws Exception {
...... Send pojo to worker thread and return
确保设置的值大于最高处理时间(使用一些超时来限制执行时间)。您能使用@SqsListener吗?您是从源代码构建的吗?我也面临着控制轮询间隔的相同情况。您找到解决方案了吗?我们找不到任何选项,于是离开了spring,开始直接使用AWS SDK进行队列轮询。在根据可用线程数使用AWS SDK进行轮询时,我们限制了消息数
@Bean
public com.amazonaws.services.sqs.AmazonSQSAsyncClient awsSqsClient() {
ExecutorService executorService = Executors.newFixedThreadPool(10);
return new AmazonSQSAsyncClient(new DefaultAWSCredentialsProviderChain(), executorService);
}
@SqsListener(value = "${queueName}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(YourCustomPOJO pojo,
@Headers Map<String, Object> headers,
Acknowledgment acknowledgment,
Visibility visibility) throws Exception {
...... Send pojo to worker thread and return
acknowledgment.acknowledge().get();