private EventDeserializer getEventDeserializer() { EventDeserializer eventDeserializer = new EventDeserializer(); // do not deserialize binlog events except the EXT_WRITE_ROWS and TABLE_MAP Arrays.stream(EventType.values()).forEach(eventType -> { if (eventType != EventType.EXT_WRITE_ROWS && eventType != EventType.TABLE_MAP && eventType != EventType.ROTATE) { eventDeserializer.setEventDataDeserializer(eventType, new NullEventDataDeserializer()); } }); eventDeserializer.setEventDataDeserializer(EventType.EXT_WRITE_ROWS, new WriteRowsEventDataDeserializer( tableMapEventByTableId).setMayContainExtraInformation(true)); return eventDeserializer; }
/** * Blocks until the listener has seen the specified number of events with the given type, or until the specified time * has passed. * * @param eventCount the number of events * @param type the type of event * @param timeoutMillis the maximum amount of time in milliseconds that this method should block * @throws TimeoutException if the waiting timed out before the expected number of events were received */ public void consume(int eventCount, EventType type, long timeoutMillis) throws TimeoutException { consume(eventCount, defaultTimeoutInMillis, event -> { EventHeader header = event.getHeader(); EventType eventType = header == null ? null : header.getEventType(); return type.equals(eventType); }); }
currentBinlogPosition = header.getPosition(); log.debug("Got message event type: {} ", new Object[]{header.getEventType().toString()}); switch (eventType) { case TABLE_MAP:
@Override public FormatDescriptionEventData deserialize(ByteArrayInputStream inputStream) throws IOException { FormatDescriptionEventData eventData = new FormatDescriptionEventData(); eventData.setBinlogVersion(inputStream.readInteger(2)); eventData.setServerVersion(inputStream.readString(50).trim()); inputStream.skip(4); // redundant, present in a header eventData.setHeaderLength(inputStream.readInteger(1)); inputStream.skip(EventType.FORMAT_DESCRIPTION.ordinal() - 1); eventData.setDataLength(inputStream.readInteger(1)); return eventData; } }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("getEventType")) { return RawEventType.valueOf(eventHeader.getEventType().name()); } else { return this.eventHeader.getClass().getMethod(method.getName()).invoke(this.eventHeader); } } }
private EventDeserializer getEventDeserializer() { EventDeserializer eventDeserializer = new EventDeserializer(); // do not deserialize binlog events except the EXT_WRITE_ROWS, WRITE_ROWS, and TABLE_MAP Arrays.stream(EventType.values()).forEach(eventType -> { if (eventType != EventType.EXT_WRITE_ROWS && eventType != EventType.TABLE_MAP && eventType != EventType.WRITE_ROWS && eventType != EventType.ROTATE) { eventDeserializer.setEventDataDeserializer(eventType, new NullEventDataDeserializer()); } }); eventDeserializer.setEventDataDeserializer(EventType.EXT_WRITE_ROWS, new WriteRowsEventDataDeserializer( tableMapEventByTableId).setMayContainExtraInformation(true)); eventDeserializer.setEventDataDeserializer(EventType.WRITE_ROWS, new WriteRowsEventDataDeserializer( tableMapEventByTableId)); return eventDeserializer; }
/** * Blocks until the listener has seen the specified number of events with the given type, or until the specified time * has passed. * * @param eventCount the number of events * @param type the type of event * @param timeoutMillis the maximum amount of time in milliseconds that this method should block * @throws TimeoutException if the waiting timed out before the expected number of events were received */ public void consume(int eventCount, EventType type, long timeoutMillis) throws TimeoutException { consume(eventCount, defaultTimeoutInMillis, event -> { EventHeader header = event.getHeader(); EventType eventType = header == null ? null : header.getEventType(); return type.equals(eventType); }); }
currentBinlogPosition = header.getPosition(); log.debug("Got message event type: {} ", new Object[]{header.getEventType().toString()}); switch (eventType) { case TABLE_MAP:
if (EventType.isWrite(eventType)) { tableId = ((WriteRowsEventData) eventData).getTableId(); } else if (EventType.isUpdate(eventType)) { tableId = ((UpdateRowsEventData) eventData).getTableId(); } else if (EventType.isDelete(eventType)) { tableId = ((DeleteRowsEventData) eventData).getTableId(); } else {