Вообще есть несколько моментов. Работа с пользователями, разбитие по доменам, связь. И если с протоколами связи разобраться не сложно, то вопрос организации связанности приводит в размышлениях либо к сторонним программам, либо к тому, что все сервисы будут знать друг о друг.
"все сервисы будут знать друг о друг" => это правильно и не нужно боятся этого.
"Работа с пользователями" => когда нужен пользователь просто идем в users-ms, но обычно используют тот же JWT или как-то еще передают базовою инфу про пользователя.
"разбитие по доменам" => тут не так сложно, просто смотрим на проект, и прикидываем а что же можно разделить, после того как накидали примерный список сервисов, смотрим какие сервисы очень часто между собой будут общаться и решаем можем ли мы их логику соединить в едино или нет. Например мы могли бы разделить products и stock (склад) но это не правильно будет ибо товарам нужно быстро знать что там по остаткам.