Базовая реализация SignalR IMessageBus

У меня есть служебное приложение, которое работает почти как объединительная плата SignalR, поэтому я подумал, что было бы неплохо создать собственную реализацию IMessageBus для взаимодействия с серверной частью, а не разворачивать свою собственную. Проблема в том, что я не могу найти много информации об этом контракте. Хотя я просматривал код (выглядит очень хорошо), я изо всех сил пытаюсь понять некоторые концепции.

public interface IMessageBus
{
    Task Publish(Message message);
    IDisposable Subscribe(ISubscriber subscriber, string cursor, Func<MessageResult, object, Task<bool>> callback, int maxMessages, object state);
}
  1. Task Publish(Message message);

Этот простой, в основном он должен отправить сообщение на серверную часть. Я не беспокоюсь об этом, потому что мое приложение однонаправлено от сервера к клиенту.

  1. IDisposable Subscribe(ISubscriber subscriber, string cursor, Func<MessageResult, object, Task<bool>> callback, int maxMessages, object state);

    • return: Despite of saying IDisposable, I have seen it always return a Subscription object, but why IDisposable?
    • subscriber идентифицирует соединение. Это соединение может подписаться или отказаться от подписки на группы.
    • cursor: идентификатор последнего полученного сообщения.
    • callback: когда выполняется этот обратный вызов?
    • state: что это такое?

Может кто-нибудь объяснить мне, как работает этот метод?


person vtortola    schedule 29.01.2014    source источник


Ответы (1)


Я бы рекомендовал наследовать от ScaleoutMessageBus (https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.messaging.scaleoutmessagebus(v=vs.111).aspx)

Он обеспечивает абстракцию и инкапсулирует все управление подписками, поэтому можно сосредоточиться на реализации объединительной платы.

Вы также можете взглянуть на базовую реализацию Redis (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Redis/RedisMessageBus.cs) просто в качестве примера.

Если интересно, исходный код SignalR с открытым исходным кодом, поэтому вы также можете посмотреть на реализацию ScaleoutMessageBus (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Messaging/ScaleoutMessageBus.cs)

Надеюсь, это поможет.

person Michael Parshin    schedule 19.04.2015