基本SignalR IMessageBus实现

时间:2014-01-29 10:52:33

标签: signalr signalr-backplane

我有一个服务应用程序,它的工作方式与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);
  2. 这个很容易,基本上它必须向后端发送消息。我并不担心这个,因为我的应用程序是从服务器到客户端的单向。

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

      • return:尽管说IDisposable,我看到它总是返回一个Subscription对象,但为什么IDisposable
      • subscriber标识连接。该连接可以订阅或取消订阅组。
      • cursor:是最后收到的消息ID。
      • callback:这个回调何时执行?
      • state:这究竟是什么?
    2. 有人可以解释一下这种方法是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

我建议继承自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

希望有所帮助。