<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 定义项目的基本信息 -->
<groupId>com.example</groupId>
<artifactId>s3-example</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- AWS SDK for Java - S3 module -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.17.89</version> <!-- 确保选择最新版本 -->
</dependency>
<!-- 如果你计划使用Apache HTTP客户端作为传输层 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
<version>2.17.89</version>
</dependency>
<!-- 其他可能需要的依赖,比如日志库 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
首先,我们需要定义一个方法来获取配置好的S3客户端。这里以MinIO为例,但你可以根据自己的类S3存储服务调整端点和凭证信息。
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
public class S3ClientFactory {
public static S3Client getS3Client() {
return S3Client.builder()
.region(Region.US_EAST_1) // 根据实际情况选择区域
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create("your-access-key", "your-secret-key")))
.endpointOverride(java.net.URI.create("http://localhost:9000")) // MinIO或其他兼容服务的URL
.build();
}
}
接下来,我们使用ScheduledExecutorService
来定期执行健康检查。这个例子中,我们将每分钟检查一次S3存储服务是否正常运行。
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class HealthChecker {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public void startHealthCheck() {
final Runnable healthCheckTask = () -> {
try {
S3Client s3 = S3ClientFactory.getS3Client();
ListBucketsResponse bucketsResponse = s3.listBuckets();
if (!bucketsResponse.buckets().isEmpty()) {
System.out.println("Service is up and running.");
} else {
System.out.println("No buckets found, check service configuration.");
}
} catch (Exception e) {
System.err.println("Error occurred during health check: " + e.getMessage());
}
};
// 每隔60秒执行一次健康检查
scheduler.scheduleAtFixedRate(healthCheckTask, 0, 60, TimeUnit.SECONDS);
}
public static void main(String[] args) {
HealthChecker healthChecker = new HealthChecker();
healthChecker.startHealthCheck();
}
}
getS3Client
方法:用于初始化并返回一个配置好的S3客户端实例。startHealthCheck
方法:使用ScheduledExecutorService
安排一个周期性任务,该任务会调用s3.listBuckets()
来检查服务状态。如果能成功列出桶,则认为服务是健康的;否则,输出相应的错误信息。scheduleAtFixedRate
方法设置每隔60秒执行一次健康检查。你可以根据需要调整这个间隔时间。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。