Я создаю приложение на основе CD C, которое использует Mon go Change Streams для прослушивания событий изменений и индексации изменений в elasticsearch почти в реальном time.
Пока что я реализовал воркера, который вызывает функцию для захвата событий, их преобразования и индексации в elasticsearch без проблем при реализации потока для 1 мес. go collection:
function syncChangeEvents() {
const stream = ModelA.watch()
while (!stream.isClosed()) {
if (await stream.hasNext()) {
const event = stream.next()
// transform event
// index to elasticsearch
}
}
}
Я реализовал это с использованием бесконечного l oop (вероятно, плохой подход), но я не уверен, какие есть альтернативы, когда мне нужно постоянно поддерживать поток изменений.
Проблема возникает, когда мне нужно реализовать поток изменений для другой модели. Поскольку первая функция имеет блокировку времени l oop, рабочий не может вызвать вторую функцию, чтобы запустить второй поток изменений.
Мне интересно, как лучше всего развернуться рабочий, который может вызвать x нет. потоков изменений, не влияя на производительность каждого потока изменений. Подойдут ли рабочие потоки к go?