.NET Scalable Pub / Sub service реализация - PullRequest
2 голосов
/ 29 марта 2012

Мне нужно построить систему, похожую на систему паб / подсистему.Он состоит из нескольких подсистем или служб, работающих в отдельных исполняемых файлах или в качестве служб Windows.

Подсистемы:

  1. Pub /вспомогательная служба

    • Паб / вспомогательная служба, управляющая связью между внутренними подсистемами и пользователями.
    • Пользователь может иметь несколько открытых каналов (веб-страница,услуга SignalR, мобильное устройство, подключенное к дуплексной услуге WCF и т. д.).
    • Служба должна управлять всеми каналами пользователя и иметь возможность отправлять ему информацию по запросу на основе тем или конкретных пользователей.
    • Служба должна поддерживать несколько транспортов, таких как SignalR, WCF,или другие ...
  2. Службы работника

    • Работник, работающий в качестве службы Windows и отправляющий информацию впользователи, использующие службу pub / sub.
  3. Хост SignalR и WCF

    • Служба SignalR и служба WCF будутразмещаться на IIS

Мои вопросы

  • Поскольку подсистемы работают в отдельных процессах, как мнеобщаться между пабом / подсистемой и другими подсистемами, такими как (рабочие и IIS).Общение должно быть очень быстрым.Использую ли я именованные каналы, это достаточно быстро?

Пример;Рабочий говорит системе pub / sub отправить сообщение пользователю, системы pub / sub проверяют каналы, открытые для пользователя (скажем, канал SignalR), а затем, в свою очередь, должны уведомить службу SignalR, работающую в IIS, об отправке.сообщение браузеру пользователя.

  • Знаете ли вы о реализации подобных систем?

Наблюдения

  • Я не могу использовать сторонние сервисные сервисы (Azure ..).И даже с этим .. Я не вижу решения вышеуказанных проблем.
  • Служба должна быть очень масштабируемой и требовательной.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Если вопрос заключается в том, как связать SignalR с другими транспортными средствами, есть несколько решений.

На одном сервере вы можете просто подключить их с помощью собственного механизма pubsub в Reactive framework, который аккуратно инкапсулирован в Subject class.

Если вам нужно масштабировать до нескольких серверов, вы захотите использовать существующую служебную шину или, возможно, развернуть свою собственную простую, используя сервер SQL и SqlDependency .

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

Я рекомендую вам ознакомиться с некоторыми из существующих Service Bus технологий для .NET.

0 голосов
/ 22 августа 2016

Существует статья, в которой четко объясняется возможный механизм включения шаблона проектирования pub / sub в ваше приложение .NET. Ответ заключается в использовании распределенного кэша .NET In-Memory и использования его возможностей кластеризации в качестве среды подписки для публикации. Так как он кластеризован, вам не придется беспокоиться о простоях.

В основном вы будете использовать пользовательские события, инициированные приложением

Зарегистрируйте ваши события

public void OnApplicationEvent(object notifId, object data)
{
  ...
} 
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent);

И запускать эти события всякий раз, когда вам нужно

_cache.RaiseCustomEvent("NotificationID", DateTime.Now);

Шаблон проектирования Pub / Sub в распределенном кеше .NET

Полное раскрытие: Я работаю на Alachisoft

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