package com.dianping.puma.api;
import com.dianping.puma.api.impl.*;
import java.util.List;
/**
* 使用示例:
* PumaClient client = new PumaClientConfig()
* .setClientName("your-client-name")
* .setDatabase("database")
* .setTables(Lists.newArrayList("table0", "table1"))
* .buildClusterPumaClient();
* <p/>
* while(!Thread.currentThread().isInterrupted()) {
* try {
* BinlogMessage binlogMessage = client.get(10, 1, TimeUnit.SECOND);
* // 处理数据
* client.ack(binlogMessage.getBinlogInfo());
* } catch(Exception e) {
* // 这里的异常主要是用来打点的,便于及时发现
* }
* }
*/
public class PumaClientConfig {
private boolean enableEventLog = false;
private String clientName;
private String database;
private List<String> tables;
private boolean dml = true;
private boolean ddl = false;
private boolean transaction = false;
private PumaServerRouter router;
private String serverHost;
private List<String> serverHosts;
/**
* 客户端名称(如果多台机器启动的 clientName 相同,那么只会有一个能读取到数据,其余会一直等待)
*
* @param clientName
* @return
*/
public PumaClientConfig setClientName(String clientName) {
this.clientName = clientName;
return this;
}
/**
* 设置Puma客户端需要监听的数据库名称。每个客户端只能监听一个数据库。
*
* @param database
* @return
*/
public PumaClientConfig setDatabase(String database) {
this.database = database;
return this;
}
/**
* 设置Puma客户端需要监听的数据库表的名称列表。每个客户端可以监听一个数据库下的任意多张表。
*
* @param tables
* @return
*/
public PumaClientConfig setTables(List<String> tables) {
this.tables = tables;
return this;
}
/**
* 设置Puma客户端是否需要所监听库表的DML(Data Manipulation Language)事件。
*
* @param dml
* @return
*/
public PumaClientConfig setDml(boolean dml) {
this.dml = dml;
return this;
}
/**
* 设置Puma客户端是否需要所监听库表的DDL(Data Definition Language)事件。
*
* @param ddl
* @return
*/
public PumaClientConfig setDdl(boolean ddl) {
this.ddl = ddl;
return this;
}
/**
* 设置Puma客户端是否需要所监听库表的Transaction(begin,commit)事件。
*
* @param transaction
* @return
*/
public PumaClientConfig setTransaction(boolean transaction) {
this.transaction = transaction;
return this;
}
public PumaClientConfig setRouter(PumaServerRouter router) {
this.router = router;
return this;
}
public PumaClientConfig setServerHost(String serverHost) {
this.serverHost = serverHost;
return this;
}
public PumaClientConfig setServerHosts(List<String> serverHosts) {
this.serverHosts = serverHosts;
return this;
}
public boolean isEnableEventLog() {
return enableEventLog;
}
public PumaClientConfig setEnableEventLog(boolean enableEventLog) {
this.enableEventLog = enableEventLog;
return this;
}
public String getClientName() {
return clientName;
}
public String getDatabase() {
return database;
}
public List<String> getTables() {
return tables;
}
public boolean isDml() {
return dml;
}
public boolean isDdl() {
return ddl;
}
public boolean isTransaction() {
return transaction;
}
public PumaServerRouter getRouter() {
return router;
}
public String getServerHost() {
return serverHost;
}
public List<String> getServerHosts() {
return serverHosts;
}
public SimplePumaClient buildSimplePumaClient() {
return new SimplePumaClient(this);
}
/**
* 根据PumaClientConfig的配置创建具备ha功能的Puma客户端。
*
* @return
*/
public PumaClient buildClusterPumaClient() {
return buildLionClusterPumaClient();
}
public PumaClient buildLionClusterPumaClient() {
ConfigPumaServerMonitor monitor = new ConfigPumaServerMonitor(database, tables);
router = new RoundRobinPumaServerRouter(monitor);
return new ClusterPumaClient(this);
}
public PumaClient buildFixedClusterPumaClient() {
FixedPumaServerMonitor monitor = new FixedPumaServerMonitor(serverHosts);
router = new RoundRobinPumaServerRouter(monitor);
return new ClusterPumaClient(this);
}
}