Опросы клиенту делать не надо, но надо отправить первый consume/auth запрос, говоря что готов начать прием событий, а потом начинает слушать databus и получать новые события. Всё общение идет через вэб сокеты.
Т.е. жестко прописывали какие микросервисы через какой инстанс nsqd общаются? А не было проблем с администрированием? И потом это же вроде не решает проблемы дублирования? Если сервис не успел обработать сообщение за таймаут настроенный на nsqd — то это сообщение может получить другой потребитель. А с какими нюансами столкнулись? На моей практике было достаточно настроить правильно nsqd, а лукап работал довольно стабильно и исправно дискаверил :)
На деле тоже всё хорошо. миллионы сообщений clickstream в минуту через NSQ гонялись(и гоняются) без проблем (И немаловажную роль играет именно удобный скейлинг + nsqlookupd). nsqlookupd довольно удобная вещь в плане topic discovery. Т.е. достаточно знать только адресс nsqlookupd и указать ему имя топика, а в ответ список серваков на которых этот топик хранится. Официальный клиент под golang всё это делает автоматически. Единственное чего там не было — это поиск по wildcard, но это довольно просто решалось руками.
по умолчанию NSQ всё же для быстрого обмена сообщениями с хранением в памяти. Можно настроить параметр
--mem-queue-size=0
и тогда все сообщения будут проходить через диск. Но надо будет ещё позаботиться о репликации. NSQ мы используем для clickstream аналитики, где потеря одного события не будет иметь катастрофических последствий. В случае с шиной нам нужна гарантия что мы ничего не потеряем.
Немного дополню. Клиенты общаются с Data-Bus по вэбсокету. Сообщение отправлять можно пачкой. Обрабатывать можно по одному или пачками. Все общение происходит синхронно, т.е. клиент не получит ОК пока data-bus не получит ОК от Кафки. И обратно сервис не отправит новые сообщения пока клиент не ответит на предыдущие.
Попробуйте с приложений под мобильный. Врядли для рецептов девушка будет таскать ноут на кухню. На первом этапе можно делать без бэка. Порисуйте вместе экраны, переходы между экранами, составьте т.з. того что она хотела бы увидеть. А дальше по желанию или на нативном(kotlin, java / swift) или нет(python(kivy), react-native, dart(flutter)). Список рецептов можно усложнять постепенно и на каждом этапе видеть результат.
Краткая форма объявления переменных
Внутри функции, краткий оператор присваивания := с неявным типом может быть использован вместо объявления с помощью var
Попробуйте с приложений под мобильный. Врядли для рецептов девушка будет таскать ноут на кухню. На первом этапе можно делать без бэка. Порисуйте вместе экраны, переходы между экранами, составьте т.з. того что она хотела бы увидеть. А дальше по желанию или на нативном(kotlin, java / swift) или нет(python(kivy), react-native, dart(flutter)). Список рецептов можно усложнять постепенно и на каждом этапе видеть результат.
tour.golang.org/basics/10
Краткая форма объявления переменных
Внутри функции, краткий оператор присваивания := с неявным типом может быть использован вместо объявления с помощью var