2016-11-27 3 views
0

Я пытаюсь поднять голову вокруг MassTransit в сочетании с RabbitMQ. Основные понятия работают в тестовом проекте, но мне нужно следующее:Как настроить MassTransit в ненадежной сетевой среде?

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

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

Итак, вопрос: имеет ли MassTransit какой-то механизм для хранения сообщений локально каким-либо образом, пока соединение не будет восстановлено? Или мне нужно установить RabbitMQ на каждый сервер публикации, чтобы создать локальный обмен? Затем мне нужно, чтобы обмены синхронизировались после повторного подключения.

ответ

2

Возможно, вам необходимо ввести магазин и переслать. Вместо того, чтобы публиковать прямо ваше сообщение через MassTransit и RabbitMQ, вы можете сохранить это сообщение в репозитории постоянства (локальной базы данных) и делегировать другому процессу уведомление через Masstransit сообщений, хранящихся ранее. Этот подход часто упоминается как «Высокая доступность клиента». Это не заменяет стандартный HA (High Availability) на сервере, как тот, который реализован RabbitMQ. Но это хороший подход к использованию в распределенной системе (например, тот, который вы описали), потому что это может помочь вам в сценариях сбоя сервера (например, проблема на сервере RabbitMQ, которая вызывает некоторую потерю сообщений, которые у вас все еще есть в хранилище какого-либо клиента, и поэтому вы можете заставить его снова обрабатывать).

Смежные вопросы