Объясните некоторые моменты RabbitMQ
Всем привет. В общем сломал всю голову, читая документацию по RabbitMQ, но так и не нашёл ответы на некоторые вопросы. Может кто умеет готовить кролика и подскажет куда копать, а то у меня в голове уже овсянка =(
Если говорить о микросервисах, то пока понятно только то, что на 1 микросервис создаётся 1 подключение. А дальше куча вопросов
Нужен ли второй канал внутри одного подключения или хватит одного?
- Ну типа через один канал принимаем сообщения, а через другой отправляем. Где-то читал, что нужно открывать по 1 каналу на поток. Но что в контексте приложения значит «поток»?
Сколько нужно обменников и нужны ли они вообще, если есть стандартные обменники? Как правильно выбрать тип обменника?
. Предположу, что это скорее архитектурный вопрос и каждый решает для себя сам, но вдруг есть какая-то конвенция или даже логика.
Сколько нужно очередей?
. Пока думаю, что для каждого сервиса нужна только 1 очередь (даже если будет запущено 10 сервисов reports
, то они все будут слушать очередь reports
)
routeId vs headers
- какой вариант лучше использовать в какой ситуации и почему.
если послать запрос в fanout, куда должны отвечать все получатели запроса? как понять, что никто не промолчал? а как понять что какому-то сервису реально нечего ответить? То есть как в итоге понять, что все получили запрос, поняли его и отреагировали если должны, что никто в это время еще не готовит какой-то долгий ответ.
Есть подозрение, что ответы от сервисов как бы вообще не стоит ждать но, что тогда делать, если мне нужно в один response клиенту собрать ответы от нескольких сервисов.
А если у меня например что-то типа slack (просто это самый подходящий пример для объяснения сути вопроса), то нужно ли для каждого диалога создавать по 2 очереди или хватит по 1 или вообще сделать просто 1 очередь? а сколько нужно обменников в этом случае? Вот есть у меня пользовательские подписки на события на серверах, стоит ли там юзать rabbit или лучше просто wss subscribe?