我有一个服务应用程序,它的工作方式与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);
}
Task Publish(Message message);
这个很容易,基本上它必须向后端发送消息。我并不担心这个,因为我的应用程序是从服务器到客户端的单向。
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
:这究竟是什么?有人可以解释一下这种方法是如何工作的吗?
答案 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)
希望有所帮助。