Spring Boot SQSlistener未接收消息

eyh26e7m  于 2022-11-05  发布在  Spring
关注(0)|答案(5)|浏览(241)

我可以从我的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);
}

我已经通过转到AWS控制台验证了send,我可以在队列中看到我的消息,但它们不会到达receive method. config:

@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);
}
xtupzzrd

xtupzzrd1#

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

vql8enpb

vql8enpb2#

虽然已经晚了,但它可能会帮助一些人。在我的情况下,我使用了这些配置的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"
yhived7q

yhived7q3#

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

ct2axkht

ct2axkht4#

在我的例子中,我在config类中缺少一个注解@EnableSqs

k0pti3hp

k0pti3hp5#

在我的例子中,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();
  }

相关问题