首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SqsListener配置为长池

将SqsListener配置为长池
EN

Stack Overflow用户
提问于 2021-05-20 08:45:45
回答 1查看 593关注 0票数 1

我正在使用spring boot实现一个SQS订户,在互联网上进行了一些研究后,我找到了spring-cloud项目。

使用注释@SqsListener看起来很容易接收来自主题的消息,但我希望将其实现为长池而不是短池,即在消息到达时立即接收消息。

代码语言:javascript
复制
    @SqsListener(
        value = ["queue"],
        deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS
    )
    fun subscribeToSSmsg: String) {
    ....
    }

这是工作顺利,但我想接收消息使用长池。有没有办法使用spring-cloud来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 09:08:13

使用AWS Java SDK 1.X。

您需要定义一个需要com.amazonaws.services.sqs.AmazonSQSAsync bean的自定义org.springframework.cloud.aws.messaging.config.SimpleMessageListenerContainerFactory bean。

将以下bean添加到您的配置中。

代码语言:javascript
复制
@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客户端的超时值高于您为长轮询设置的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67612576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档