public class RocketMQCanalConnector extends java.lang.Object implements CanalMQConnector
注意点: 1. 相比于canal SimpleCanalConnector, 这里get和ack操作不能有并发, 必须是一个线程执行get后,内存里执行完毕ack后再取下一个get
| 构造器和说明 |
|---|
RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.Integer batchSize,
boolean flatMessage) |
RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage) |
RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage,
boolean enableMessageTrace,
java.lang.String customizedTraceTopic,
java.lang.String accessChannel) |
RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage,
boolean enableMessageTrace,
java.lang.String customizedTraceTopic,
java.lang.String accessChannel,
java.lang.String namespace) |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
ack()
消费确认。
|
void |
ack(long batchId)
进行 batch id 的确认。
|
boolean |
checkValid()
检查下链接是否合法
几种case下链接不合法:
1.
|
void |
connect()
链接对应的canal server
|
void |
disconnect()
释放链接
|
Message |
get(int batchSize)
获取数据,自动进行确认,该方法返回的条件:尝试拿batchSize条记录,有多少取多少,不会阻塞等待
|
Message |
get(int batchSize,
java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
获取数据,自动进行确认
该方法返回的条件:
a.
|
java.util.List<FlatMessage> |
getFlatList(java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
获取数据,自动进行确认,设置timeout时间直到拿到数据为止
该方法返回的条件:
a.
|
java.util.List<FlatMessage> |
getFlatListWithoutAck(java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
获取数据,设置timeout时间直到拿到数据为止
该方法返回的条件:
a.
|
java.util.List<Message> |
getList(java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
获取数据,自动进行确认,设置timeout时间直到拿到数据为止
该方法返回的条件:
a.
|
java.util.List<Message> |
getListWithoutAck(java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
获取数据,设置timeout时间直到拿到数据为止
该方法返回的条件:
a.
|
Message |
getWithoutAck(int batchSize)
不指定 position 获取事件,该方法返回的条件: 尝试拿batchSize条记录,有多少取多少,不会阻塞等待
canal 会记住此 client 最新的position。 |
Message |
getWithoutAck(int batchSize,
java.lang.Long timeout,
java.util.concurrent.TimeUnit unit)
不指定 position 获取事件.
|
void |
rollback()
回滚到未进行
CanalMQConnector.ack() 的地方,下次fetch的时候,可以从最后一个没有 CanalMQConnector.ack() 的地方开始拿 |
void |
rollback(long batchId)
回滚到未进行
CanalConnector.ack(long) 的地方,指定回滚具体的batchId |
void |
subscribe()
客户端订阅,不提交客户端filter,以服务端的filter为准
|
void |
subscribe(java.lang.String filter)
客户端订阅,重复订阅时会更新对应的filter信息
说明:
a.
|
void |
unsubscribe()
取消订阅
|
public RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage,
boolean enableMessageTrace,
java.lang.String customizedTraceTopic,
java.lang.String accessChannel,
java.lang.String namespace)
public RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage,
boolean enableMessageTrace,
java.lang.String customizedTraceTopic,
java.lang.String accessChannel)
public RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.Integer batchSize,
boolean flatMessage)
public RocketMQCanalConnector(java.lang.String nameServer,
java.lang.String topic,
java.lang.String groupName,
java.lang.String accessKey,
java.lang.String secretKey,
java.lang.Integer batchSize,
boolean flatMessage)
public void connect()
throws CanalClientException
CanalConnectorconnect 在接口中 CanalConnectorCanalClientExceptionpublic void disconnect()
throws CanalClientException
CanalConnectordisconnect 在接口中 CanalConnectorCanalClientExceptionpublic boolean checkValid()
throws CanalClientException
CanalConnector几种case下链接不合法: 1. 链接canal server失败,一直没有一个可用的链接,返回false 2. 当前客户端在进行running抢占的时候,做为备份节点存在,非处于工作节点,返回false 说明: a. 当前客户端一旦做为备份节点存在,当前所有的对CanalConnector的操作都会处于阻塞状态,直到转为工作节点 b. 所以业务方最好定时调用checkValid()方法用,比如调用CanalConnector所在线程的interrupt,直接退出CanalConnector,并根据自己的需要退出自己的资源
checkValid 在接口中 CanalConnectorCanalClientExceptionpublic void subscribe(java.lang.String filter)
throws CanalClientException
CanalConnector说明: a. 如果本次订阅中filter信息为空,则直接使用canal server服务端配置的filter信息 b. 如果本次订阅中filter信息不为空,目前会直接替换canal server服务端配置的filter信息,以本次提交的为准 TODO: 后续可以考虑,如果本次提交的filter不为空,在执行过滤时,是对canal server filter + 本次filter的交集处理,达到只取1份binlog数据,多个客户端消费不同的表
subscribe 在接口中 CanalConnectorCanalClientExceptionpublic void subscribe()
throws CanalClientException
CanalConnectorsubscribe 在接口中 CanalConnectorCanalClientExceptionpublic void unsubscribe()
throws CanalClientException
CanalConnectorunsubscribe 在接口中 CanalConnectorCanalClientExceptionpublic java.util.List<Message> getList(java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalMQConnector该方法返回的条件: a. 如果timeout=0,有多少取多少,不会阻塞等待 b. 如果timeout不为0,尝试阻塞对应的超时时间,直到拿到数据就返回
getList 在接口中 CanalMQConnectorCanalClientExceptionpublic java.util.List<Message> getListWithoutAck(java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalMQConnector该方法返回的条件: a. 如果timeout=0,有多少取多少,不会阻塞等待 b. 如果timeout不为0,尝试阻塞对应的超时时间,直到拿到数据就返回
getListWithoutAck 在接口中 CanalMQConnectorCanalClientExceptionpublic java.util.List<FlatMessage> getFlatList(java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalMQConnector该方法返回的条件: a. 如果timeout=0,有多少取多少,不会阻塞等待 b. 如果timeout不为0,尝试阻塞对应的超时时间,直到拿到数据就返回
getFlatList 在接口中 CanalMQConnectorCanalClientExceptionpublic java.util.List<FlatMessage> getFlatListWithoutAck(java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalMQConnector该方法返回的条件: a. 如果timeout=0,有多少取多少,不会阻塞等待 b. 如果timeout不为0,尝试阻塞对应的超时时间,直到拿到数据就返回
getFlatListWithoutAck 在接口中 CanalMQConnectorCanalClientExceptionpublic void ack()
throws CanalClientException
CanalMQConnectorack 在接口中 CanalMQConnectorCanalClientExceptionpublic void rollback()
throws CanalClientException
CanalMQConnectorCanalMQConnector.ack() 的地方,下次fetch的时候,可以从最后一个没有 CanalMQConnector.ack() 的地方开始拿rollback 在接口中 CanalConnectorrollback 在接口中 CanalMQConnectorCanalClientExceptionpublic Message get(int batchSize) throws CanalClientException
CanalConnectorget 在接口中 CanalConnectorCanalClientExceptionpublic Message get(int batchSize, java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalConnector该方法返回的条件: a. 拿够batchSize条记录或者超过timeout时间 b. 如果timeout=0,则阻塞至拿到batchSize记录才返回
get 在接口中 CanalConnectorCanalClientExceptionpublic Message getWithoutAck(int batchSize) throws CanalClientException
CanalConnectorgetWithoutAck 在接口中 CanalConnectorCanalClientExceptionpublic Message getWithoutAck(int batchSize, java.lang.Long timeout, java.util.concurrent.TimeUnit unit) throws CanalClientException
CanalConnector该方法返回的条件: a. 拿够batchSize条记录或者超过timeout时间 b. 如果timeout=0,则阻塞至拿到batchSize记录才返回canal 会记住此 client 最新的position。
getWithoutAck 在接口中 CanalConnectorCanalClientExceptionpublic void ack(long batchId)
throws CanalClientException
CanalConnectorack 在接口中 CanalConnectorCanalClientExceptionpublic void rollback(long batchId)
throws CanalClientException
CanalConnectorCanalConnector.ack(long) 的地方,指定回滚具体的batchIdrollback 在接口中 CanalConnectorCanalClientExceptionCopyright © 2021. All rights reserved.