SqsListener 没有为本地堆栈队列运行?

Fre*_*001 3 java amazon-sqs spring-boot

我是 Spring Boot 的新手,并尝试使用 sqs 侦听器在本地堆栈中轮询测试队列。我可以将消息推送到我的本地堆栈队列中。但是,然后我想轮询同一个队列并记录消息的内容。但是,我没有收到 sqs 列表器记录到控制台的任何消息?

应用程序-local.properties

cloud.aws.region=us-east-1
cloud.local.sqs=http://localstack:4576
cloud.local.s3=http://localstack:4572

app.sqs.maxmessages=1
app.sqs.input=http://localstack:4576/queue/test-queue
app.sqs.output=http://localstack:4576/queue/test-queue
Run Code Online (Sandbox Code Playgroud)

应用控制器

@Log4j2
@RestController
public class AppController {

    private AmazonS3 s3;

    private SQSOutput output;

    @Autowired
    public AppController(AmazonS3 s3, SQSOutput output) {

        this.s3 = s3;
        this.output = output;
    }

    @RequestMapping("/send")
    public Map<String, String> sendMessage() {
        output.send("Test Message!");

        Map<String, String> response = new HashMap<>();
        response.put("message", "Message sent!");
        return response;
    }

    @SqsListener(value = "${app.sqs.input}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
    public void getMessage(String message) {

        log.info("Received message: " + message);
    }

}
Run Code Online (Sandbox Code Playgroud)

设置Bean

@Component
public class SetupBeans {

    @Value("${cloud.aws.region}")
    private String region;

    @Value("${cloud.local.s3}")
    private String localCloudS3;

    @Value("${cloud.local.sqs}")
    private String localCloudSQS;

    @Value("${app.sqs.output}")
    private String outputUrl;

    @Value("${app.sqs.maxmessages}")
    private int maxMessages;

    @Bean
    @Primary
    private AWSCredentialsProvider credProvider() {
        return DefaultAWSCredentialsProviderChain.getInstance();
    }

    @Bean
    @Primary
    public AmazonS3 amazonS3() {
        AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder
                .EndpointConfiguration(localCloudS3, region);
        return AmazonS3ClientBuilder.standard()
                .withEndpointConfiguration(endpointConfiguration)
                .build();
    }

    @Bean
    @Primary
    private AmazonSQSAsync amazonSQSAsync() {
        AmazonSQSAsyncClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder
                .EndpointConfiguration(localCloudSQS, region);
        return AmazonSQSAsyncClientBuilder.standard()
                .withEndpointConfiguration(endpointConfiguration)
                .build();
    }

    @Bean
    private QueueMessagingTemplate queueMessagingTemplate() {

        return new QueueMessagingTemplate(amazonSQSAsync());
    }

    @Bean
    public QueueMessageHandlerFactory queueMessageHandlerFactory() {
        QueueMessageHandlerFactory factory = new QueueMessageHandlerFactory();
        MappingJackson2MessageConverter messageConverter = new MappingJackson2MessageConverter();

        // set strict content type match to false
        messageConverter.setStrictContentTypeMatch(false);
        factory.setArgumentResolvers(Collections.<HandlerMethodArgumentResolver>singletonList(new PayloadArgumentResolver(messageConverter)));
        return factory;
    }

    @Bean
    public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSQS){
        SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
        factory.setAmazonSqs(amazonSQS);
        factory.setMaxNumberOfMessages(maxMessages);
        return factory;
    }

    @Bean
    private QueueMessageChannel getQueueMessageChannel() {
        return new QueueMessageChannel(amazonSQSAsync(), outputUrl);
    }

    @Bean
    public SQSOutput getSQSOutput() {
        return new SQSOutput(queueMessagingTemplate(), getQueueMessageChannel());
    }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*001 5

我正在使用org.springframework.cloud:spring-cloud-aws-messaging但需要使用org.springframework.cloud:spring-cloud-starter-aws-messaging.