初始化
确认Endpoint
在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于服务域名的部分,理解Endpoint相关的概念。百度云目前开放了多区域支持,请参考区域选择说明。
访问区域 | 对应Endpoint |
---|---|
北京 | bj |
广州 | gz |
苏州 | su |
香港 | hkg |
武汉 | fwh |
保定 | bd |
获取密钥
要使用百度云百舸服务,您需要拥有一个有效的AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问百舸服务做签名验证。
可以通过如下步骤获得并了解您的AK/SK信息:
创建Client对象
每种具体的服务都有一个Client
对象,为开发者与对应的服务进行交互封装了一系列易用的方法。
调用功能接口
开发者基于创建的对应服务的Client
对象,即可调用相应的功能接口,使用百度云产品的功能。
示例
下面给出一个基本的使用示例,详细使用说明请参考各服务的详细说明文档。
1public class Sample {
2 public static void main(String[] args) {
3 String ak = <your-access-key-id>; // 用户的Access Key ID
4 String sk = <your-secret-access-key>; // 用户的Secret Access Key
5 String endpoint = "aihc.bj.baidubce.com"; // 修改区域标识可以切换不同region的域名
6 // 初始化一个AihcClient
7 AihcClientConfiguration config = new AihcClientConfiguration();
8 config.setCredentials(new DefaultBceCredentials(ak, sk));
9 config.setEndpoint(endpoint);
10 config.setProtocol(Protocol.HTTPS);
11 AihcClient client = new AihcClient(config);
12 }
13}
在上面代码中,变量ak
与sk
是由系统分配给用户的,均为字符串,用于标识用户,为访问百舸做签名验证。 其中ak
对应控制台中的“Access Key ID”,sk
对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 获取ACCESSKEY》。
上面的方式使用北京区域的域名作为百舸的默认服务地址,如果用户需要自己指定域名,可以通过修改域名中的区域信息来指定。
配置
使用HTTPS协议
该SDK支持使用HTTPS协议访问百度云的服务产品,您可以通过如下两种方式在BCC Java SDK中使用HTTPS访问BCC服务:
- 在endpoint中指明https:
1String ak = "ak";
2String sk = "sk";
3BceClientConfiguration config = new BceClientConfiguration();
4config.setCredentials(new DefaultBceCredentials(ak, sk));
5AihcClient client = new AihcClient(config);
- 通过调用setProtocol方法设置https协议:
1String endpoint = "aihc.bj.baidubce.com"; // endpoint中不包含protocol
2String ak = "ak";
3String sk = "sk";
4BceClientConfiguration config = new BceClientConfiguration();
5config.setCredentials(new DefaultBceCredentials(ak, sk));
6config.setEndpoint(endpoint);
7config.setProtocol(Protocol.HTTPS); // 如果不指明, 则使用http
8AihcClient client = new AihcClient(config);
注意:如果在endpoint中指明了protocol, 则endpoint中的生效, 另外单独再调用setProtocol()不起作用。
1String endpoint = "http://aihc.bj.baidubce.com";
2String ak = "ak";
3String sk = "sk";
4BceClientConfiguration config = new BceClientConfiguration();
5config.setCredentials(new DefaultBceCredentials(ak, sk));
6config.setEndpoint(endpoint);
7config.setProtocol(Protocol.HTTPS); // endpoint中已经指明, 此为无效操作, 对http也是如此
8AihcClient client = new AihcClient(config);
配置AihcClient
如果用户需要配置AihcClient的一些细节的参数,可以在构造AihcClient的时候传入BceClientConfiguration对象。 BceClientConfiguration是服务的公用配置类,可以为客户端配置代理,最大连接数等参数。
使用代理
下面一段代码可以让客户端使用代理访问BCC服务:
1String ak = <your-access-key-id>; // 用户的Access Key ID
2String sk = <your-secret-access-key>; // 用户的Secret Access Key
3String endpoint = <domain-name>; // 用户自己指定的域名
4
5// 创建BceClientConfiguration实例
6BceClientConfiguration config = new BceClientConfiguration();
7
8// 配置代理为本地8080端口
9config.setProxyHost("127.0.0.1");
10config.setProxyPort(8080);
11
12// 创建AihcClient客户端
13config.setCredentials(new DefaultBceCredentials(ak, sk));
14config.setEndpoint(endpoint);
15AihcClient client = new AihcClient(config);
使用上面的代码段,客户端的所有操作都会通过127.0.0.1地址的8080端口做代理执行。 对于有用户验证的代理,可以通过下面的代码段配置用户名和密码:
1// 创建BceClientConfiguration实例
2BceClientConfiguration config = new BceClientConfiguration();
3
4// 配置代理为本地8080端口
5config.setProxyHost("127.0.0.1");
6config.setProxyPort(8080);
7
8//设置用户名和密码
9config.setProxyUsername(<username>); //用户名
10config.setProxyPassword(<password>); //密码
设置网络参数
用户可以用BceClientConfiguration对基本网络参数进行设置:
1BceClientConfiguration config = new BceClientConfiguration();
2
3// 设置HTTP最大连接数为10
4config.setMaxConnections(10);
5
6// 设置TCP连接超时为5000毫秒
7config.setConnectionTimeout(5000);
8
9// 设置Socket传输数据超时的时间为2000毫秒
10config.setSocketTimeout(2000);
参数说明
通过BceClientConfiguration能指定的所有参数如下表所示:
参数 | 说明 |
---|---|
UserAgent用户代理,指HTTP的User-Agent头 | |
Protocol | 连接协议类型 |
ProxyDomain | 访问NTLM验证的代理服务器的Windows域名 |
ProxyHost | 代理服务器主机地址 |
ProxyPort | 代理服务器端口 |
ProxyUsername | 代理服务器验证的用户名 |
ProxyPassword | 代理服务器验证的密码 |
ProxyPreemptiveAuthenticationEnabled | 是否设置用户代理认证 |
ProxyWorkstation | NTLM代理服务器的Windows工作站名称 |
LocalAddress | 本地地址 |
ConnectionTimeoutInMillis | 建立连接的超时时间(单位:毫秒) |
SocketTimeoutInMillis | 通过打开的连接传输数据的超时时间(单位:毫秒) |
MaxConnections | 允许打开的最大HTTP连接数 |
RetryPolicy | 连接重试策略 |
SocketBufferSizeInBytes | Socket缓冲区大小 |
StreamBufferSize | 流文件缓冲区大小 |
错误处理
BCC异常提示有如下两种方式:
异常方法 | 说明 |
---|---|
BceClientException | 客户端异常 |
BceServerException | 服务器异常 |
用户可以使用try获取某个事件所产生的异常。
SDK日志
BCC Java SDK发布版本中增加了logback作为slf4j的实现,如果用户没有自己的实现可以直接用,如果工程中有其他的如log4j则可以替代。
默认日志
如果用户使用默认的logback,则需要配置logback.xml到classpath中。如果没有这个配置文件,日志级别默认为DEBUG。
1<configuration>
2 <property name="LOG_HOME" value="./log/"/>
3 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4 <!-- encoders are assigned the type
5 ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
6 <encoder>
7 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
8 </encoder>
9 </appender>
10
11 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
12 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
13 <FileNamePattern>${LOG_HOME}/BccUnitTest.%d{yyyy-MM-dd}.log</FileNamePattern>
14 <MaxHistory>30</MaxHistory>
15 </rollingPolicy>
16 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
17 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
18 </encoder>
19 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
20 <MaxFileSize>10MB</MaxFileSize>
21 </triggeringPolicy>
22 </appender>
23
24 <root level="info">
25 <appender-ref ref="STDOUT"/>
26 <appender-ref ref="FILE"/>
27 </root>
28</configuration>
自有日志模块
若用户使用自己的日志实现模块,例如项目依赖于Maven,则可以类似下面的配置到pom.xml中来去除logback。
1<?xml version="1.0" encoding="utf-8"?>
2
3<dependency>
4 <groupId>com.baidubce</groupId>
5 <artifactId>bce-java-sdk</artifactId>
6 <version>${bce.sdk.version}</version>
7 <exclusions>
8 <exclusion>
9 <groupId>ch.qos.logback</groupId>
10 <artifactId>logback-classic</artifactId>
11 </exclusion>
12 <exclusion>
13 <groupId>ch.qos.logback</groupId>
14 <artifactId>logback-core</artifactId>
15 </exclusion>
16 <exclusion>
17 <groupId>org.slf4j</groupId>
18 <artifactId>jcl-over-slf4j</artifactId>
19 </exclusion>
20 </exclusions>
21</dependency>