如何使用侦听器读取Amazon SQS消息?

时间:2019-06-06 14:06:35

标签: java spring-boot queue listener amazon-sqs

我想使用Amazon SQS将消息排队,但是@SqsListener似乎没有读取消息。

我尝试使用ScheduledThreadPoolExecutor读取消息,但仅使用GET请求读取。当队列中没有消息或正在运行中只有一条消息时,执行程序将停止,我应该重新运行它。另外,当我在队列中添加新消息时,执行程序不会自动运行。 这就是为什么我添加了一个侦听器,以便它在队列中有消息时读取消息,而在队列中没有消息时才休息。

该侦听器还无法正常工作,甚至不会引发异常。 这是代码。你能在这里找到我做错了吗?

@Configuration
public class SqsConfig {
    @Value("${amazon.s3.region}")
    private String region;

    @Value("${amazon.s3.accessKey}")
    private String awsAccessKey;

    @Value("${amazon.s3.secretKey}")
    private String awsSecretKey;

    @Bean
    public QueueMessagingTemplate queueMessagingTemplate() {
        return new QueueMessagingTemplate(amazonSQSAsync());
    }

    @Bean
    public AmazonSQSAsync amazonSQSAsync() {
        return AmazonSQSAsyncClientBuilder.standard().withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey)))
                .build();
    }
}

@RestController
@RequestMapping("/sqs")
public class SQSController {
    private static final Logger LOG = LoggerFactory.getLogger(SQSController.class);

    @Autowired
    private QueueMessagingTemplate queueMessagingTemplate;
    @Value("${amazon.sqs.standard}")
    private String standard;

    @PostMapping
    public void sendMessage(@RequestParam String m) {
        queueMessagingTemplate.send(standard, MessageBuilder.withPayload(m).build());
    }

    @SqsListener("my_sqs_name")
    public void listener(String message) {
        LOG.info("MY MESSAGE " + message);
    }
}

侦听器应从控制台读取和删除消息,但目前还没有。

0 个答案:

没有答案