ServiceStack: как использовать распределенные RedisEvents?
Существует очень мало документации (которую я нашел) о том, как распределенные RedisEvents работают в ServiceStack.
В документации сказано:
Одно ограничение, которое имеет реализация по умолчанию MemoryServerEvents, ограничено для использования в пределах одного Сервера приложений, где поддерживаются все клиентские соединения. Это больше не является ограничением для новой серверной части Redis ServerEvents, которая использует распределенную серверную часть Redis-сервера, чтобы обеспечить возможность горизонтального масштабирования, способную обслуживать серверы приложений с разветвленной / распределенной нагрузкой. Если вы знакомы с SignalR, это похоже на масштабирование SignalR с Redis back-end.
В нем также говорится, как добавить плагин, но больше ничего не говорится о том, как распределяются события, как вы публикуете распределенное событие и как вы обрабатываете, какой узел реагирует на него и публикует канал, который достигнет правильного конца. клиент.
Я что-то упустил или документации по этому вопросу почти нет?
1 ответ
Документация для RedisServerEvents
находится по адресу: http://docs.servicestack.net/redis-server-events
В API нет разницы между использованием серверной части событий In Memory или Redis Server, которая прозрачно работает за IServerEvents
API. Разница только в регистрации, где нужно зарегистрироваться RedisServerEvents
с вашим настроенным IRedisClientsManager
:
var redisHost = AppSettings.GetString("RedisHost");
if (redisHost != null)
{
container.Register<IRedisClientsManager>(
new RedisManagerPool(redisHost));
container.Register<IServerEvents>(c =>
new RedisServerEvents(c.Resolve<IRedisClientsManager>()));
container.Resolve<IServerEvents>().Start();
}
Это заменяет память по умолчанию IServerEvents
с RedisServerEvents
реализация, которая отправляет вызовы API через Redis Pub/Sub для уведомления всех серверов приложений, настроенных с RedisServerEvents
Конфигурация, которая будет отправлять событие сервера подключенным клиентам на их локальном /event-stream
,