Hablar sobre la posición del canal

Orden

Este artículo estudia principalmente la posición del canal.

Posición

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);
    }

}
复制代码
  • La posición define el método toString, utilizando el método ToStringBuilder.reflectionToString para convertir a 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 hereda Position, que define el atributo de marca de tiempo

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 hereda TimePosition, que define los atributos incluidos, journalName, position, serverId, gtid

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 hereda EntryPosition, que define los atributos de masterHost y masterPort

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 hereda Position, que define dos atributos, identidad y posición

cursor

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 define los métodos getCursor y updateCursor; el método getCursor devuelve Position de acuerdo con clientIdentity; el método updateCursor actualiza la posición de clientIdentity especificado

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 implementa la interfaz CanalMetaManager, que define los cursores de la estructura Map, la clave es ClientIdentity y el valor es Position; el método getCursor obtiene la posición de los cursores de acuerdo con clientIdentity; el método updateCursor actualiza el valor de la clave en los cursores a clientIdentity.

Resumen

Position define el método toString, utilizando el método ToStringBuilder.reflectionToString para convertir a CanalToStringStyle.DEFAULT_STYLE; tiene dos subclases directas, TimePosition y LogPosition; EntryPosition hereda TimePosition; SlaveEntryPosition hereda EntryPosition combina la combinación de posición de entrada

Doc

Supongo que te gusta

Origin juejin.im/post/5e9bb182f265da47ca6932af
Recomendado
Clasificación