Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic SignalR IMessageBus implementation

I have a service application that works pretty much like a SignalR backplane, so I thought it would be good idea to create my own IMessageBus implementation to talk with the backend, rather than roll out my own thing. The problem is that I cannot find much information about this contract. Although I have been taking a look at the code (that looks very good), I'm struggling to understand some concepts.

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);

This one is easy, basically it must send a message to the backend. I am not worried about this one, because my app is unidirectional from server to client.

  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 identifies a connection. That connection can subscribe or unsubscribe to groups.
    • cursor: is the last received message id.
    • callback: when is this callback executed?
    • state: what is this exactly?

Can somebody explain me how this method work?

like image 298
vtortola Avatar asked Jan 29 '14 10:01

vtortola


Video Answer


1 Answers

I would recommend to inherit from ScaleoutMessageBus (https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.messaging.scaleoutmessagebus(v=vs.111).aspx)

It provides an abstraction and encapsulates all subscription management, so it is possible to focus on a back plane implementation.

You can also take a look on Redis base implementation (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Redis/RedisMessageBus.cs) just as example.

If it is interesting SignalR is open source, so you can look at ScaleoutMessageBus implementation as well (https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Messaging/ScaleoutMessageBus.cs)

Hope that helps.

like image 72
Michael Parshin Avatar answered Sep 24 '22 05:09

Michael Parshin