Я хочу поставить в очередь сообщения, используя 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);
}
}
Слушатель должен читать и удалять сообщения из консоли, но пока это не так.