我想使用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);
}
}
侦听器应从控制台读取和删除消息,但目前还没有。