Ивент - это класс, хранящий в себе тип ивента и передаваемую информацию ивента
Ивенты передаются через сообщения кафки, для удобства определения типа передаваемого ивента, первые четыре символа сообщения отводятся на тип ивента, тогда сообщения ивентов имееют вид <event_type_prefix> <event_data>
Тип ивента представляется enum'ом, каждому типу соответсвует его представление в виде префикса сообщения:
class EventType(Enum):
Invalid = 'erro'
TrendData = 'trda'
GetMetrics = 'getm'
...
Для каждого класса, который передается ивентом должны быть реализованы способы сериализации и десериализации.
Способ сериализации мы задаем при помощи имплементации функции __str__
для класса передаваемых данных.
Способ десериализации мы задаем при помощи имплементации конструктора класса <DataClass>FromStr
. Этот класс наследуется от <DataClass>
.
Для работой с сообщениями кафки написано два класса: KafkaEventWriter
и KafkaEventReader
.
Запись происходит разово при каждом вызове метода send()
.
Считывание происходит в очередь событий (event_queue
, переданный в конструкторе) в отдельном потоке.
То есть read_events()
запущен постоянно, он сохраняет ивенты в очередь. Чтобы получить первый ивент в очереди, вызываем event_queue.get()
.