Проверка работоспособности пружинного загрузчика - SQS Consumer - PullRequest
0 голосов
/ 11 мая 2018

Существует ли конечная точка проверки работоспособности пружинного загрузчика для SQS?Я создал потребителя SQS и хочу проверить, работает ли SQS.Я не использую JMSlistener для подключения к SQS, а использую библиотеки Spring Cloud.

Я реализовал указанную ниже конечную точку проверки работоспособности.Это возвращает ошибку ниже, когда я удаляю очередь и пытаюсь достичь конечной точки проверки работоспособности.Если возникнет проблема с подключением или служба 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);
        }
    }

}

Beans

@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 Ответ

0 голосов
/ 11 мая 2018

Вы должны написать пользовательскую проверку работоспособности, как показано ниже, чтобы проверить, существует или нет ваша очередь, вызвав 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
    }
    }
...