Проверка работоспособности весеннего загрузчика - SQS Consumer
Существует ли конечная точка проверки работоспособности пружинного загрузчика для SQS? Я создал потребителя SQS и хочу проверить, работает ли SQS. Я не использую JMSlistener для подключения к SQS, а использую Spring Cloud Libraries.
Я реализовал следующую конечную точку проверки работоспособности. Это возвращает ошибку ниже, когда я удаляю очередь и пытаюсь достичь конечной точки проверки работоспособности. Если возникнет проблема с подключением или служба SQS выйдет из строя, получу ли я похожую ошибку, которая в конечном итоге приведет к сбою конечной точки проверки работоспособности?
com.amazonaws.services.sqs.model.QueueDoesNotExistException: указанная очередь не существует для этой версии wsdl. (Сервис: AmazonSQS; Код состояния: 400; Код ошибки: AWS.SimpleQueueService.NonExistentQueue; Идентификатор запроса: cd8e205d-dc43-535e-931f-7332733bd16c)
public class SqsQueueHealthIndicator extends AbstractHealthIndicator {
private final AmazonSQSAsync amazonSQSAsync;
private final String queueName;
public SqsQueueHealthIndicator(AmazonSQSAsync amazonSQSAsync, String queueName) {
this.amazonSQSAsync = amazonSQSAsync;
this.queueName = queueName;
}
@Override
protected void doHealthCheck(Health.Builder builder) {
try {
amazonSQSAsync.getQueueUrl(queueName);
builder.up();
} catch (QueueDoesNotExistException e) {
e.printStackTrace();
builder.down(e);
}
}
}
Фасоль
@Bean
SqsQueueHealthIndicator queueHealthIndicator(@Autowired AmazonSQSAsync amazonSQSAsync, @Value("${sqs.queueName}") String queueName) {
return new SqsQueueHealthIndicator(amazonSQSAsync, queueName);
}
@Bean
SqsQueueHealthIndicator deadLetterQueueHealthIndicator(@Autowired AmazonSQSAsync amazonSQSAsync, @Value("${sqs.dlQueueName}") String deadLetterQueueName) {
return new SqsQueueHealthIndicator(amazonSQSAsync, deadLetterQueueName);
}
1 ответ
Вы должны написать пользовательскую проверку работоспособности, как показано ниже, чтобы убедиться, что ваша очередь существует или нет, вызвав getQueueUrl с помощью AWS Java SDK lib.
@Component
public class SQSHealthCheck implements HealthIndicator {
@Override
public Health health() {
int errorCode = check(); // perform some specific health check
if (errorCode != 0) {
return Health.down()
.withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
public int check() {
/**
your logic to check queue exists or not using by calling getQueueUrl . e.g you will get queue url of a queue named "SampleQueue" like https://sqs.us-east-1.amazonaws.com/12XXX56789XXXX/SampleQueue
**/
return 0; // 0 or 1 based on result
}
}