2017-01-24 18 views
0

Многие книги и статьи показывают, что циклы в микросервисах обычно плохи, поскольку они вносят взаимную взаимозависимость, что в результате приводит к большей зависимости, проблемам управления версиями и развертывания.Двусторонняя связь для Restpect Microservices, разумна ли для уведомления?

Однако, предположим, что есть служба , вызов службы B, также полагают, что, поскольку этот вызов будет инициировать громоздкое вычисление таким образом, мы не должны делать этого вызова синхронно. Возможным решением является сервис A передает URL-адрес ресурса B, так что когда когда-либо B рассчитывает результат, он должен опубликовать результат с заданным URL-адресом после спокойной парадигмы. Итак, этот конечный ресурс похож на какой-то обратный вызов. Этот подход действительно решит мою проблему, однако, как объясняется в предыдущем параграфе, он вводит циклическую зависимость. Это нормально? если не так, как иначе вы решите ту же проблему?

ответ

1

Его хорошо, но не хороший дизайн, так как вы можете видеть зависимость довольно жестко.

У вас есть выбор, чтобы использовать обмен сообщениями, где вы помещаете сообщение запроса в одну очередь и ответное сообщение в другой очереди.

Таким образом, ваше сообщение будет асинхронным, слабо связанным, и ни одна из служб не должна знать очень конкретно друг о друге и их местоположении/адресе. Это также способ общения в соответствии с рекомендациями Reactive Manifesto.

+0

Для этого сценария, использующего две очереди, звучит как чересчур избыток. В вопросе обратите внимание, что только А знает адрес Б. Так что это не большая проблема. Кроме того, ваша очередь решений должна знать об этих адресах, если сами службы не выполняют опрос (чего я хочу избежать). Нет так убежден ... –

+1

Отправителю и получателю в очередь нужно знать имя очереди. Нет никакого опроса, требуемого приемником сообщений на слушающем конце очереди, он изначально основан на событиях, хотя вы можете использовать механизм опроса, но это не намерение. Значит, никто не узнает и не должен знать адрес отправителя или получателя; но только имена очередей и расположение сервера обмена сообщениями, например сервера внедрения JMS. – hB0