Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

task

Реализуется пакет subpub, который предоставляет шину событий в стиле Publisher-Subscriber. При этом каждый subject может иметь множество подписчиков, при публикации сообщений гарантируется их последовательная (FIFO) доставка каждому подписчику. Каждый подписчик обрабатывается в своём горутине, поэтому медленный обработчик не тормозит остальных. При вызове метода Close шина должна корректно завершать работу, при этом учитывая переданный контекст (если контекст отменён – выходим сразу, оставляя уже запущенные хендлеры работать, но не допуская утечек горутин).

Во второй части создаётся gRPC‑сервис, который использует пакет subpub для реализации потоковой подписки и публикации событий по ключу. Клиент может подписаться, получая поток событий, либо опубликовать событие, после чего оно транслируется всем подписчикам соответствующего ключа. Для вопросов успешности/неуспешности используются стандартные коды из пакетов google.golang.org/grpc/status и google.golang.org/grpc/codes.

Используемые паттерны и моменты:

  • Dependency Injection: Экземпляр шины событий (subpub.SubPub) создаётся в точке входа и передается в реализацию gRPC‑сервиса.
  • Graceful Shutdown: При получении сигналов завершения (SIGINT/SIGTERM) сервер останавливается – сначала вызывается grpc.GracefulStop(), затем метод Close шины с таймаутом.
  • Конфигурация: Параметры сервиса (например, порт) задаются через конфигурационный объект (через флаги).
  • Логирование: Пример использует стандартный пакет log.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages