Плюсы и минусы синхронного обмена сообщениями RabbitMQ

как мы все знаем, шина сообщений, такая как rabbitMQ, в основном предназначена для асинхронного обмена сообщениями, поэтому стандартный подход состоит в том, чтобы запустить и забыть, как опубликовать что-то на шине, и не беспокоиться о том, кто или когда будет обрабатывать опубликованное сообщение. Но я думаю о последнем разговоре в нашей команде разработчиков о синхронной обработке сообщения: случай будет заключаться в публикации сообщения на служебной шине, и, как издатель, я хочу дождаться, пока какой-либо подписчик обработает сообщение и вернет мне результаты - так это выглядит скорее как модель запрос-ответ. Сейчас я думаю об одном доводе, например, о снижении производительности этой модели. о чем ты думаешь? Когда использовать асинхронность и когда синхронизацию? Каковы компромиссы?


person Macko    schedule 12.10.2017    source источник


Ответы (1)


Синхронный обмен сообщениями возможен, но влияет на масштабируемость. Если издателю приходится ждать ответа своих получателей, то он будет ограничен в том, чего он может достичь в любой момент времени.

Однако вы можете получить запрос-ответ, используя асинхронный обмен сообщениями. В RabbitMQ это делается с помощью удаленного вызова процедур (RPC) узор.

Проще говоря, ваш издатель публикует сообщение, но не ждет ответа; тем временем он может продолжать заниматься другими делами. Однако издатель отслеживает это, помещая CorrelationId в сообщение и сохраняя его локально. Сообщение в конечном итоге достигает потребителя, который обрабатывает его и отвечает издателю в другой очереди. Ответ имеет тот же CorrelationId. Когда издатель получает ответ, он может пометить этот конкретный вызов (через CorrelationId) как обработанный.

Если вы хотите, вы также можете делать другие вещи с CorrelatonId, например, тайм-аут для тех сообщений, на которые мы не получили ответа после, например. 30 секунд.

person Gigi    schedule 12.10.2017
comment
Можете ли вы предоставить пример кода для запроса-ответа? - person Macko; 12.10.2017
comment
Вы можете найти его по ссылке, которую я дал. - person Gigi; 12.10.2017