将 Sqs 监听器配置为长轮询
Configure SqsListener as Long Pooling
我正在使用 spring 启动实现 SQS 订阅者,在互联网上进行一些研究后,我找到了项目 spring-cloud
。
使用注释 @SqsListener
看起来很容易接收来自主题的消息,但我想将其实现为长池而不是短池,它会在消息到达时立即接收每条消息。
@SqsListener(
value = ["queue"],
deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS
)
fun subscribeToSSmsg: String) {
....
}
这工作很顺利,但我想使用长池接收消息。有什么方法可以使用 spring-cloud 来实现吗?
使用 AWS Java SDK 1.X。
您需要定义一个自定义 org.springframework.cloud.aws.messaging.config.SimpleMessageListenerContainerFactory
bean,它需要一个 com.amazonaws.services.sqs.AmazonSQSAsync
bean。
将以下 bean 添加到您的配置中。
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setWaitTimeOut(20); //Long polling, the maximum value of 20 seconds
factory.setAmazonSqs(amazonSqs);
factory.setMaxNumberOfMessages(10); //The maximum number of messages you want to read in a single poll
return factory;
}
@Bean
@Primary
AmazonSQSAsync amazonSQSAsync(AWSCredentialsProvider credentialsProvider) {
return new AmazonSQSBufferedAsyncClient(
AmazonSQSAsyncClientBuilder
.standard()
.withRegion("region") //Set an appropriate region
.withCredentials(credentialsProvider)
.build());
}
同时确保您使用的 HTTP 客户端的超时值高于您为长轮询设置的值。
我正在使用 spring 启动实现 SQS 订阅者,在互联网上进行一些研究后,我找到了项目 spring-cloud
。
使用注释 @SqsListener
看起来很容易接收来自主题的消息,但我想将其实现为长池而不是短池,它会在消息到达时立即接收每条消息。
@SqsListener(
value = ["queue"],
deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS
)
fun subscribeToSSmsg: String) {
....
}
这工作很顺利,但我想使用长池接收消息。有什么方法可以使用 spring-cloud 来实现吗?
使用 AWS Java SDK 1.X。
您需要定义一个自定义 org.springframework.cloud.aws.messaging.config.SimpleMessageListenerContainerFactory
bean,它需要一个 com.amazonaws.services.sqs.AmazonSQSAsync
bean。
将以下 bean 添加到您的配置中。
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setWaitTimeOut(20); //Long polling, the maximum value of 20 seconds
factory.setAmazonSqs(amazonSqs);
factory.setMaxNumberOfMessages(10); //The maximum number of messages you want to read in a single poll
return factory;
}
@Bean
@Primary
AmazonSQSAsync amazonSQSAsync(AWSCredentialsProvider credentialsProvider) {
return new AmazonSQSBufferedAsyncClient(
AmazonSQSAsyncClientBuilder
.standard()
.withRegion("region") //Set an appropriate region
.withCredentials(credentialsProvider)
.build());
}
同时确保您使用的 HTTP 客户端的超时值高于您为长轮询设置的值。