服务器鉴权与连接

鉴权需客户持有username和password并指定CA证书路径,在创建UltipaClientDriver的时候传入UltipaConnUserSecret:

UltipaConnUserSecret ultipaConnUserSecret = UltipaConnUserSecret.config()
 		.password(password)
 		.username(username)
		.crtFile(crtFile) 
 		.connType(connType)
 		.timeout(timeout)
 		.readLevel(readLevel)
 		.url(host);

各个参数的意义如下:

username 用户名
password 密码
crtFile 证书位置
connType 链接方式insecure 或 ssl
timeout 超时时间
readLevel 读等级inconsistency或consistency
url 逗号分隔的链接如localhost:60161,localhost:60162

INSECURE模式

insecure即普通登录,需要配置connType为insecure,该模式不需要传入证书,

UltipaConnUserSecret ultipaConnUserSecret = UltipaConnUserSecret
 	.config()
	.connType("ssl")
	.username("root")
	.password("root")
	.crtFile("F:\\ultipa.crt")
	.timeout(15)
	.url("120.0.1:60162,120.0.1:60163,120.0.1:60161");
UltipaClientDriver driver = new UltipaClientDriver(ultipaConnUserSecret);
Connection client = new DefaultConnection();
String reply = client.sayHello("Xu Sheng");
println(reply);

响应:

"Xu Sheng Welcome To Ultipa!"

连接成功。

ultipa.properties配置文件

sdk同样也提供了配置文件来连接ultipa server。

在工程项目的classpath中创建一个名为ultipa.properties的配置文件。填入以下连接所需配置:

ultipa.grpc.pool.conn.type=insecure
ultipa.grpc.pool.conn.username=root
ultipa.grpc.pool.conn.password=root
ultipa.grpc.pool.conn.crtFile=F:\\ultipa.crt
ultipa.grpc.pool.conn.overrideAuthority=ultipa
ultipa.grpc.pool.conn.query.timeout=15
ultipa.grpc.pool.conn.url=120.0.1:60162,120.0.1:60163,120.0.1:60161

新建ultipa driver的时候会自动读取ultipa.properties文件,编写连接程序则不需要以上配置信息:

UltipaClientDriver driver = new UltipaClientDriver();
Connection client = new DefaultConnection();
String reply = client.sayHello("Xu Sheng");
println(reply);

响应:

"Xu Sheng Welcome To Ultipa!"

连接池

UltipaClientDriver默认使用apache common-pool连接池,在使用创建UltipaClientDriver时可以指定连接池相应的配置信息:

GenericObjectPoolConfig<ManagedChannel> poolConfig 
        = new GenericObjectPoolConfig<ManagedChannel>();
poolConfig.setMaxIdle(50);
poolConfig.setMinIdle(2);
poolConfig.setMaxTotal(200);
poolConfig.setMaxWaitMillis(-1);
UltipaClientDriver driver = new UltipaClientDriver(poolConfig);
Connection client = new DefaultConnection();
String reply = client.sayHello("Xu Sheng");
println(reply);

当然也可以在ultipa.properties中指定:

#最大空闲数
ultipa.grpc.pool.conn.maxIdle=50
#最小空闲数
ultipa.grpc.pool.conn.minIdle=22
#最大池对象总数
ultipa.grpc.pool.conn.maxTotal=2000
#逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
ultipa.grpc.pool.conn.minEvictableIdleTimeMillis=1800000
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
ultipa.grpc.pool.conn.timeBetweenEvictionRunsMillis=3600000
#在获取对象的时候检查有效性, 默认false
ultipa.grpc.pool.conn.testOnBorrow=true
#在归还对象的时候检查有效性, 默认false
ultipa.grpc.pool.conn.testOnReturn=false
#在空闲时检查有效性, 默认false
ultipa.grpc.pool.conn.testWhileIdle=false
#最大等待时间, 默认的值为-1,表示无限等待。
ultipa.grpc.pool.conn.maxWaitMillis=-1
#是否启用后进先出, 默认true
ultipa.grpc.pool.conn.lifo=true
#连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
ultipa.grpc.pool.conn.blockWhenExhausted=true
#每次逐出检查时 逐出的最大数目 默认3
ultipa.grpc.pool.conn.numTestsPerEvictionRun=3

DefaultConnection对象

DefaultConnection是对ultipa server发送操作命令的默认对象。在项目中启动时创建完UltipaClientDriver对象后,在任何地方声明DefaultConnection对象都会自动的于该UltipaClientDriver中指定的ultipa server联系。

创建DefaultConnection对象有以下几种方式:

直接使用UltipaClientDriver创建:

UltipaClientDriver driver = new UltipaClientDriver();
Connection client = driver.getConnection();
String reply = client.sayHello("Xu Sheng");
println(reply);

或者在任何地方直接声明:

Connection client = new DefaultConnection();
String reply = client.sayHello("Xu Sheng");
println(reply);

创建完Connection对象后,可以拿来对ultipa server进行操作。

单例与集群连接

UltipaClientDriver默认会对填写的url链接进行请求与判断,自动切换到分布式模式或者单机模式。