Как настроить MassTransit в ненадежной сетевой среде?

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

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

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

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


person Frank    schedule 27.11.2016    source источник


Ответы (1)


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

person Paolo Laurenti    schedule 29.11.2016