当前位置: 首页 > 知识库问答 >
问题:

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

家西岭
2023-03-14

是否存在SQS的Spring引导执行器健康检查终结点?我已经构建了一个SQS使用者,我想检查SQS是否已启动并运行。我没有使用JMSlistener连接到SQS,而是使用Spring云库。

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

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个答案

姚乐家
2023-03-14

您必须编写如下所示的自定义健康检查,通过使用AWS Java SDK库调用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
    }
    }
 类似资料:
  • 我有一个与这里类似的情况:Spring Cloud Stream和RabbitMQ健康检查 错误信息 环境: Java 8 Grails 3.3.8 弹簧-拉比-1.7.9.释放 弹簧引导致动器-1.5.15.释放 KeyCloak服务器4.6.0.final 知道怎么能让兔子在这里停用吗?

  • 我试图通过 但是什么也没发生。似乎它在等待什么。控制台没有回来。不得不用CTRL C杀死它。 我还试图通过 与上述行为相同。

  • 我试图理解docker编写健康检查选项是如何工作的。 运行状况检查:间隔:1 分钟30 秒超时:10 秒重试次数:3 我是否可以说这个配置将每90秒轮询一个容器,然后如果容器在10秒后超时,则群将再次尝试3次,之后它将标记容器终止并创建一个新容器来替换它 此处的文档 https://docs.docker.com/compose/compose-file/compose-file-v3/ 没什么帮

  • 我有现有的Spring MVC web应用程序。现在我只想使用Spring-Boot-Starter-Actutor中提供的健康检查特性。

  • 我发现了这个问题。。 您希望使用最少的步骤为在多个区域中运行的一组计算引擎实例配置网络负载平衡的自动修复。如果VM在3次尝试后无响应,则需要配置VM的重新创建,每次10秒。你应该怎么做? A、 使用引用现有实例组的后端配置创建HTTP负载平衡器。将运行状况检查设置为健康(HTTP) B、 使用引用现有实例组的后端配置创建HTTP负载平衡器。定义平衡模式并将最大RPS设置为10。 C.创建托管实例组