@Override public List<PublishedEvent> parse(PostgresWalMessage message, long lastSequenceNumber, String slotName) { List<PostgresWalChange> changes = Arrays.asList(message.getChange()); return changes .stream() .filter(change -> change.getKind().equals("insert") && change.getTable().equals("events")) .map(insertedEvent -> { List<String> columns = Arrays.asList(insertedEvent.getColumnnames()); int id = columns.indexOf("event_id"); int entityId = columns.indexOf("entity_id"); int entityType = columns.indexOf("entity_type"); int eventDate = columns.indexOf("event_data"); int eventType = columns.indexOf("event_type"); int metadata = columns.indexOf("metadata"); List<String> values = Arrays.asList(insertedEvent.getColumnvalues()); return new PublishedEvent(values.get(id), values.get(entityId), values.get(entityType), values.get(eventDate), values.get(eventType), new BinlogFileOffset(slotName, lastSequenceNumber), Optional.ofNullable(values.get(metadata))); }) .collect(Collectors.toList()); } }
private void sendOldPublishedEvent(Producer<String, String> producer, String topicName) { for (int i = 0; i < 10; i++) { PublishedEvent publishedEvent = new PublishedEvent(); publishedEvent.setEntityId(UUID.randomUUID().toString()); String json = JSonMapper.toJson(publishedEvent); producer.send( new ProducerRecord<>(topicName, publishedEvent.getEntityId(), json)); } }
@Override public PublishedEvent transformEventBeanToEvent(PublishedEventBean eventBean) { return new PublishedEvent(eventBean.getEventId(), eventBean.getEntityId(), eventBean.getEntityType(), eventBean.getEventData(), eventBean.getEventType(), null, eventBean.getMetadataOptional()); } }
private void floodTopic(Producer<String, String> producer, String binlogFilename, String topicName) { for (int i = 0; i < 10; i++) { PublishedEvent publishedEvent = new PublishedEvent(); publishedEvent.setEntityId(UUID.randomUUID().toString()); publishedEvent.setBinlogFileOffset(new BinlogFileOffset(binlogFilename, (long)i)); String json = JSonMapper.toJson(publishedEvent); producer.send( new ProducerRecord<>(topicName, publishedEvent.getEntityId(), json)); } }
@Override public PublishedEvent parseEventData(WriteRowsEventData eventData, String binlogFilename, long position) throws IOException { if (columnOrders.isEmpty()) { try { getColumnOrders(); } catch (SQLException e) { throw new RuntimeException(e); } } String eventDataValue; if(getValue(eventData, EVENT_DATA_FIELDNAME) instanceof String) { eventDataValue = (String) getValue(eventData, EVENT_DATA_FIELDNAME); } else { eventDataValue = JsonBinary.parseAsString((byte[])getValue(eventData, EVENT_DATA_FIELDNAME)); } return new PublishedEvent( (String)getValue(eventData, EVENT_ID_FIELDNAME), (String)getValue(eventData, ENTITY_ID_FIELDNAME), (String)getValue(eventData, ENTITY_TYPE_FIELDNAME), eventDataValue, (String)getValue(eventData, EVENT_TYPE_FIELDNAME), new BinlogFileOffset(binlogFilename, position), Optional.ofNullable((String)getValue(eventData, EVENT_METADATA_FIELDNAME)) ); }