Ceph 和 java client
Ceph 和 java 客户端
这应该是 2020 年度最后一个技术文章了...
背景
很多个项目的需求都要牵扯到存点东西,老是存本地又不优雅。
- 迁移麻烦
- 测试麻烦
- 就是不想存本地
然后找到了个 Ceph 这个对象存储组件,打算要上了。
然后突然发现官方的 java 客户端最后更新时间在 2014 年....
这个官方客户端为何弃疗...
但是仔细看 Ceph 还支持了很多协议,例如 S3 .
看到是 Amazon 出品的我就放心了。果断上车。
install on docker
有个 blog 写的特别好 整个过程行云流水,这里就不再复制粘贴了。
https://www.cnblogs.com/hackyo/archive/2004/01/13/13373340.html
java client
中文 ceph 页面的 client 示例 好多代码都过时了,然后看了看源代码 用上了不过时的
引入依赖
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.925</version>
</dependency>
构建客户端
// 配置协议
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTP);
// 配置 认证
String accessKey = "JQOJQ47HXEKAZEXWWDOZ";
String secretKey = "APU0ya3hEbkVh3XRfjMlmLzq08RYMQCsUDtA8cE0";
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
// build client
AmazonS3 client = AmazonS3Client.builder()
.withClientConfiguration(clientConfig)
.withCredentials(new AWSStaticCredentialsProvider(credentials))
// endpoint 为连接 ceph 的地址, region 不用管(那是S3用的)
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("10.10.10.2:7480", null))
.build();
简单读写
// 创建桶
Bucket bucket = client.createBucket("my-new-bucket");
// 保存对象
client.putObject("my-new-bucket", "key1", "value1");
// 遍历桶
ObjectListing objects = client.listObjects("my-new-bucket");
do {
for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
System.out.println(objectSummary.getKey() + "\t" +
objectSummary.getSize() + "\t" +
StringUtils.fromDate(objectSummary.getLastModified()) + "\t" +
objectSummary.toString());
}
objects = client.listNextBatchOfObjects(objects);
} while (objects.isTruncated());
// 获取对象
S3ObjectInputStream key1 = client.getObject("my-new-bucket", "key1").getObjectContent();
// 获取值
System.out.println(new String(key1.readAllBytes()));
参考
- https://www.cnblogs.com/hackyo/archive/2004/01/13/13373340.html
- http://docs.ceph.org.cn/radosgw/s3/
- https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
本文链接:https://blog.inmind.ltd/index.php/archives/69/
This blog is under a CC BY-NC-SA 4.0 Unported License