$serviceLocator */ #[TaggedLocator(tag: 'kupshop.kafka.dbmessages', defaultIndexMethod: 'getClassTableName')] private ServiceLocator $serviceLocator, ) { } /** * @param $rawMessage array * * @throws KafkaInvalidMessageException */ public function create(Message $rawMessage): DBGenericMessage { $body = json_decode($rawMessage->payload, true) ?? []; if (!isset($body['cdc'])) { // for messages in legacy format $tableName = DBLegacyMessage::$tableName; } else { $tableName = $body['source']['table'] ?? ''; if (!$this->serviceLocator->has($tableName)) { $tableName = DBGenericMessage::$tableName; } } return $this->serviceLocator->get($tableName)->setMessage( $rawMessage->offset, (int) floor($rawMessage->timestamp / 1000), $rawMessage->headers, $body ); } }