Выходные расписаны.
1. сб — пью вино, ем питсу.
2. вс — пью вино, ем питсу.
1. сб — пью вино, ем питсу.
2. вс — пью вино, ем питсу.
❤5💊2
Я тактично промолчу на счёт того, что twitch сначала ввели известные вам всем правила, а потом откатили свои изменения. )
👌1
Базовый пулреквестик получился в Twir на
Переписал
Сервис отвечает за рассылку внутренних ивентов, которые создаются в twir. Например кто-то подписался на канал, использовал команду. Пользователь может создать слушатель на эти ивенты, и N количество операций.
К примеру ивент
У операций может быть delay, то есть отложенное выполнение, это вызывает проблему: когда приложение падает, или перезапускается в следствии нового обновления – мы теряем этот ивент и его операции, потому как он выполняется в отдельной горутине.
Решений может быть несколько:
1. Написать собственные абстракции для возобновления выполнения после перезапуска.
Минус у такого в том, что... всю эту логику нужно будет писать, поддерживать, продумывать схемы БД.
2. Использовать что-то готовое.
Я выбрал вариант 2, и остановился на temporal.io, так как он имеет SDK по Go, TypeScript, есть то что нужно именно мне.
Temporal позволяет описать
Имеет поддержку
Условно на вход попадает 2 операции, между ними есть
Реализовал worker который выполняет activities, и полетели.
Из минусов: я не нашёл как создать состояние для
+6,215 −4,356.Переписал
events сервис.Сервис отвечает за рассылку внутренних ивентов, которые создаются в twir. Например кто-то подписался на канал, использовал команду. Пользователь может создать слушатель на эти ивенты, и N количество операций.
К примеру ивент
FOLLOW с операцией Send Message.У операций может быть delay, то есть отложенное выполнение, это вызывает проблему: когда приложение падает, или перезапускается в следствии нового обновления – мы теряем этот ивент и его операции, потому как он выполняется в отдельной горутине.
Решений может быть несколько:
1. Написать собственные абстракции для возобновления выполнения после перезапуска.
Минус у такого в том, что... всю эту логику нужно будет писать, поддерживать, продумывать схемы БД.
2. Использовать что-то готовое.
Я выбрал вариант 2, и остановился на temporal.io, так как он имеет SDK по Go, TypeScript, есть то что нужно именно мне.
Temporal позволяет описать
Flow, и описать динамические Activities для этого Flow. Имеет поддержку
Sleep, которую на самом деле обрабатывает внутренне, а не вешает горутину.Условно на вход попадает 2 операции, между ними есть
Sleep – они просто попадут в очередь на обработку, управление ими перейдёт на temporal, своего кода писать не нужно.Реализовал worker который выполняет activities, и полетели.
Из минусов: я не нашёл как создать состояние для
Flow, чтобы в рамках одного запущенного Flow можно было расшарить состояние между Activities с мутациями . Вынес просто в redis, привязав к Flow id.
Satont.
Базовый пулреквестик получился в Twir на +6,215 −4,356. Переписал events сервис. Сервис отвечает за рассылку внутренних ивентов, которые создаются в twir. Например кто-то подписался на канал, использовал команду. Пользователь может создать слушатель на эти…
Переписал теперь таймеры, которые отправляют сообщеньки в чат раз в N времени.
Тоже использовал temporal, так как там есть решение по scheduled тасочкам.
Так как теперь там воркеры, по приколу заскейлил таймеры в 6ти экземплярах. Ну почему бы и нет, всё равно гошные приложения потребляют мало оперативной памяти.
Тоже использовал temporal, так как там есть решение по scheduled тасочкам.
Так как теперь там воркеры, по приколу заскейлил таймеры в 6ти экземплярах. Ну почему бы и нет, всё равно гошные приложения потребляют мало оперативной памяти.
Пакет от
Он сделал пакет, который способен сделать из нескольких
А ещё он сделал пакеты под самые популярные логгеры для
Я в твире у себя сделал один логгер под все приложения, подключил к нему zerolog + sentry на ошибки, ещё в и temporal его прокинул.
samber чувака – это который делал lo (lodash для го), do – di контейнер для го.Он сделал пакет, который способен сделать из нескольких
slog handler ов – один https://github.com/samber/slog-multiА ещё он сделал пакеты под самые популярные логгеры для
go, чтобы их можно было подсоединить к slog.Slog нужен для того, чтобы абстрагировать имплементацию логгера от вашего приложения. Посредством либ или самописного кода, вы подсоединяете любимый логгер к slog, и используете его интерфейс. Можете менять логеры, менять таргет writer'а(допустим писать не в консоль, а в какое-то хранилище).Я в твире у себя сделал один логгер под все приложения, подключил к нему zerolog + sentry на ошибки, ещё в и temporal его прокинул.
👍2🔥1
Вы можете использовать
save-exact=true в вашем глобальном\проектовом .npmrc, чтобы пакеты по умолчанию устанавливались с закреплённой версией 1.2.3, а не semver кареткой ^1.2.3.👍1
Кто нибудь юзает
golangci-lint? Можно как-то ошибочки прямо в `goland`е подсвечивать?
Satont.
Кто нибудь юзает golangci-lint? Можно как-то ошибочки прямо в `goland`е подсвечивать?
Оказывается я делал немного неправильно.
Есть плагин, который умеет подсвечивать ошибочки прямо в
Моя ошибка была в том, что я не поставил глобально
Есть плагин, который умеет подсвечивать ошибочки прямо в
goland, при этом filewatcher настраивать не нужно.Моя ошибка была в том, что я не поставил глобально
golanci-lint бинарник, и не указал плагину его путь. После того как сделал его — в редакторе стали появляться ворнинги\ошибки.