注文する
この記事は主に運河の位置を研究しています
ポジション
canal-1.1.4 / protocol / src / main / java / com / alibaba / otter / canal / protocol / position / Position.java
public abstract class Position implements Serializable {
private static final long serialVersionUID = 2332798099928474975L;
public String toString() {
return ToStringBuilder.reflectionToString(this, CanalToStringStyle.DEFAULT_STYLE);
}
}
复制代码
- 位置はtoStringメソッドを定義し、ToStringBuilder.reflectionToStringメソッドを使用してCanalToStringStyle.DEFAULT_STYLEに変換します
TimePosition
canal-1.1.4 / protocol / src / main / java / com / alibaba / otter / canal / protocol / position / TimePosition.java
public class TimePosition extends Position {
private static final long serialVersionUID = 6185261261064226380L;
protected Long timestamp;
public TimePosition(Long timestamp){
this.timestamp = timestamp;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
//......
}
复制代码
- TimePositionは、タイムスタンプ属性を定義するPositionを継承します
EntryPosition
canal-1.1.4 / protocol / src / main / java / com / alibaba / otter / canal / protocol / position / EntryPosition.java
public class EntryPosition extends TimePosition {
private static final long serialVersionUID = 81432665066427482L;
public static final int EVENTIDENTITY_SEGMENT = 3;
public static final char EVENTIDENTITY_SPLIT = (char) 5;
private boolean included = false;
private String journalName;
private Long position;
// add by agapple at 2016-06-28
private Long serverId = null; // 记录一下位点对应的serverId
private String gtid = null;
//......
}
复制代码
- EntryPositionは、含まれている、journalName、position、serverId、gtid属性を定義するTimePositionを継承します
SlaveEntryPosition
canal-1.1.4 / parse / src / main / java / com / alibaba / otter / canal / parse / inbound / mysql / SlaveEntryPosition.java
public class SlaveEntryPosition extends EntryPosition {
private static final long serialVersionUID = 5271424551446372093L;
private final String masterHost;
private final String masterPort;
public SlaveEntryPosition(String fileName, long position, String masterHost, String masterPort){
super(fileName, position);
this.masterHost = masterHost;
this.masterPort = masterPort;
}
public String getMasterHost() {
return masterHost;
}
public String getMasterPort() {
return masterPort;
}
}
复制代码
- SlaveEntryPositionは、masterHostおよびmasterPortの属性を定義するEntryPositionを継承します
LogPosition
canal-1.1.4 / protocol / src / main / java / com / alibaba / otter / canal / protocol / position / LogPosition.java
public class LogPosition extends Position {
private static final long serialVersionUID = 3875012010277005819L;
private LogIdentity identity;
private EntryPosition postion;
public LogIdentity getIdentity() {
return identity;
}
public void setIdentity(LogIdentity identity) {
this.identity = identity;
}
public EntryPosition getPostion() {
return postion;
}
public void setPostion(EntryPosition postion) {
this.postion = postion;
}
//......
}
复制代码
- LogPositionはPositionを継承します。Positionは、identityとpostionの2つの属性を定義します
カーソル
canal-1.1.4 / meta / src / main / java / com / alibaba / otter / canal / meta / CanalMetaManager.java
public interface CanalMetaManager extends CanalLifeCycle {
//......
/**
* 获取 cursor 游标
*/
Position getCursor(ClientIdentity clientIdentity) throws CanalMetaManagerException;
/**
* 更新 cursor 游标
*/
void updateCursor(ClientIdentity clientIdentity, Position position) throws CanalMetaManagerException;
//......
}
复制代码
- CanalMetaManagerはgetCursorメソッドとupdateCursorメソッドを定義します; getCursorメソッドはclientIdentityに従ってPositionを返します; updateCursorメソッドは指定されたclientIdentityの位置を更新します
MemoryMetaManager
canal-1.1.4 / meta / src / main / java / com / alibaba / otter / canal / meta / MemoryMetaManager.java
public class MemoryMetaManager extends AbstractCanalLifeCycle implements CanalMetaManager {
protected Map<String, List<ClientIdentity>> destinations;
protected Map<ClientIdentity, MemoryClientIdentityBatch> batches;
protected Map<ClientIdentity, Position> cursors;
//......
public Position getCursor(ClientIdentity clientIdentity) throws CanalMetaManagerException {
return cursors.get(clientIdentity);
}
public void updateCursor(ClientIdentity clientIdentity, Position position) throws CanalMetaManagerException {
cursors.put(clientIdentity, position);
}
//......
}
复制代码
- MemoryMetaManagerは、Map構造のカーソルを定義するCanalMetaManagerインターフェイスを実装します。キーはClientIdentityで、値はPositionです。getCursorメソッドは、clientIdentityに従ってカーソルからPositionを取得します。updateCursorメソッドは、カーソル内のキーの値をclientIdentityに更新します。
まとめ
Positionは、toStringBuilder.reflectionToStringメソッドを使用してCanalToStringStyle.DEFAULT_STYLEに変換するtoStringメソッドを定義します。これには、TimePositionとLogPositionの2つの直接サブクラスがあり、EntryPositionはTimePositionを継承します; SlaveEntryPositionはEntryPositionを継承します; LogPositionはEntryPositionを組み合わせます