SQSlistener 未接收消息

问题描述 投票:0回答:6

我能够从 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);
}
amazon-web-services spring-boot amazon-sqs spring-cloud-aws
6个回答
6
投票

就我而言,我在配置类中缺少注释

@EnableSqs


2
投票

原来我在 SQS 控制台和代码中的队列名称中有一个拼写错误,我的错。


2
投票

虽然已经晚了,但可能会对某人有所帮助。就我而言,我使用了 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"

1
投票

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


0
投票

在我的例子中,QueueMessageHandler bean 未初始化。

在文档中他们使用 Maven 依赖项:

<dependency>
     <groupId>io.awspring.cloud</groupId>
     <artifactId>spring-cloud-aws-messaging</artifactId>
     <version>{spring-cloud-version}</version>
</dependency>

但就我而言,我使用的是 gradle,并且还需要依赖项:

implementation(platform("io.awspring.cloud:spring-cloud-aws-dependencies:2.4.2"))
implementation("io.awspring.cloud:spring-cloud-aws-messaging")
implementation("io.awspring.cloud:spring-cloud-aws-autoconfigure")

或者您可以在自己的配置文件中定义 QueueMessageHandler

  @Bean
  public QueueMessageHandler queueMessageHandler(QueueMessageHandlerFactory factory) {
    return factory.createQueueMessageHandler();
  }

0
投票

在我的项目中使用gradle和“io.awspring.cloud:spring-cloud-aws-messaging:2.3.3”遇到了同样的问题,调试了大约3天,关键是添加“implementation(”io.awspring .cloud:spring-cloud-aws-autoconfigure")".

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.