3

我可以从我的 springboot 向 SQS 队列发送消息,但无法使用 sqslistener 注释接收,有人可以帮忙吗?

public void send(String message) {


    queueMessagingTemplate.convertAndSend("test-queue", MessageBuilder.withPayload(message).build());
}

@SqsListener(value = "test-queue", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void receive(String message)
{
    System.out.println("message: " + message);
}

我已验证通过 goign 发送到 AWS 控制台,我可以在队列中看到我的消息,但它们不会接收方法。配置:

@Bean
public AmazonSQSAsyncClient amazonSQSAsyncClient()
{

    AmazonSQSAsyncClient amazonSQSAsyncClient= new AmazonSQSAsyncClient(amazonAWSCredentials());

    if (!StringUtils.isEmpty(amazonSqsEndpoint)) {
        amazonSQSAsyncClient.setEndpoint(amazonSqsEndpoint);

    }

}

@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
    SimpleMessageListenerContainerFactory msgListenerContainerFactory = new SimpleMessageListenerContainerFactory();
    msgListenerContainerFactory.setAmazonSqs(amazonSQSAsyncClient());
    return msgListenerContainerFactory;
}

@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSqs) {
    return new QueueMessagingTemplate(amazonSQSAsyncClient());
}

@Bean
public BasicAWSCredentials amazonAWSCredentials() {
    return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey);
}
4

3 回答 3

2

原来我在 SQS 控制台和我的代码中的队列名称中有错字,我的错。

于 2017-05-11T09:04:36.267 回答
1

就我而言,指定了错误的区域。出于某种原因,发送没有抱怨并将消息推送到队列,但没有调用监听器。修复 application.yml 文件中的区域解决了这个问题。

于 2021-04-22T18:36:14.527 回答
1

虽然已经晚了,但它可能会对某人有所帮助。就我而言,我在这些配置中使用了 gradle

  implementation "io.awspring.cloud:spring-cloud-starter-aws-messaging:2.3.0"
  implementation "io.awspring.cloud:spring-cloud-aws-dependencies:2.3.0"

它不起作用,下面对我来说非常适合:

compile "io.awspring.cloud:spring-cloud-starter-aws-messaging:2.3.0"
compile "io.awspring.cloud:spring-cloud-aws-dependencies:2.3.0"
于 2021-07-10T17:49:10.027 回答