Modules
Работа с шиной из приложения. name — имя клиента (name: в его опциях).
Конфиг клиента: опции разбираются и проверяются один раз, при старте
(LogDB.Client.Supervisor), и дальше процессы и транспорты получают эту
структуру, а не сырой keyword.
Соединение одного клиента с шиной: подключает транспорт, переподключает
его и передаёт входящие события Worker'у.
Строка подключения к LogDB — всё о подключении в одной строке (одна
переменная окружения, как DATABASE_URL)
Какой консьюмер читать (LogDB.Client.Config, поле consumer)
Payload события не раскодировался парсером. Приходит в handle_error/2
консьюмера вместо вызова handle_event/4; событие отклоняется окончательно
(term): повтор раскодировался бы так же, а бесконечная переотправка
занимала слоты консьюмера. Видно в консоли LogDB среди отброшенных.
Знакомство с шиной: клиент называет себя и API, на котором говорит, шина отвечает версией, согласованным API и возможностями.
Как payload превращается в байты при публикации и обратно при доставке.
Раскодирует payload по типу, который объявил издатель (_content_type в
meta), — один консьюмер читает и JSON, и термы, и текст, что бы ни
публиковали и через какой транспорт.
Клиент шины: Connection и, если задан модуль консьюмера, Worker.
Как клиент говорит с шиной. Реализации: Erlangd (дистрибуция Erlang),
WebSocket (доставка и подтверждения), HTTP (публикация и
подтверждения), Hybrid (WS для доставки, HTTP для остального).
Доставка по WebSocket; публикация и подтверждения — по тому же сокету, если
шина говорит на клиентском API 1 (договорились в hello), иначе — по HTTP,
как раньше.
WebSocket: доставка событий и все команды шины по одному соединению — публикация, подписка, подтверждения, ping.
Ошибка клиента — одна форма для всех транспортов: {:error, %LogDB.Error{}}.