Spring 启动运行状况检查 - SQS 使用者



是否有适用于 SQS 的 Spring 启动执行器运行状况检查端点?我已经构建了一个 SQS 使用者,我想检查 SQS 是否已启动并运行。我没有使用 JMSlistener 连接到 SQS,而是使用 Spring Cloud Libraries。

我实现了以下运行状况检查终结点。当我删除队列并尝试命中运行状况检查终端节点时,这将返回以下错误。如果存在连接问题或 SQS 服务出现故障,我是否会收到类似的错误,最终导致运行状况检查端点失败?

com.amazonaws.services.sqs.model.QueueDoesNotExistException: The 此 WSDL 版本不存在指定的队列。(服务: 亚马逊SQS;状态代码: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 开发工具包库调用 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
}
}

最新更新