簡體   English   中英

Spring Boot運行狀況檢查-SQS使用者

[英]Spring Boot Health Check - SQS Consumer

SQS是否有Spring Boot Actuator運行狀況檢查端點? 我已經建立了一個SQS使用者,我想檢查SQS是否已啟動並正在運行。 我不是使用JMSlistener連接到SQS,而是使用Spring Cloud Libraries。

我實現了以下運行狀況檢查端點。 當我刪除隊列並嘗試運行狀況檢查端點時,這將返回以下錯誤。 如果存在連接問題,或者SQS服務出現故障,我是否會收到類似的錯誤,最終將導致運行狀況檢查端點失敗?

com.amazonaws.services.sqs.model.QueueDoesNotExistException:此wsdl版本的指定隊列不存在。 (服務:AmazonSQS;狀態代碼:400;錯誤代碼:AWS.SimpleQueueService.NonExistentQueue;請求ID: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);
}

您必須編寫如下的自定義運行狀況檢查,以通過使用AWS Java SDK lib調用getQueueUrl來檢查隊列是否存在。

    @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
    }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM