SignalR & Autofac - Redis Backplane Scaling

I have the following situation: I have a SignalR application in which I use Autofac as a dependency converter.

public class Startup
{
    public void Configuration(IAppBuilder app)
    { 
        var container = new AutofacContainer().Container;

        var resolver = new AutofacDependencyResolver(container);
        resolver.UseRedis("serverIp", portNumber, "password", "channelName");

        app.UseAutofacMiddleware(container);
        app.MapSignalR(new HubConfiguration
        {
            Resolver = resolver
        });

        resolver.UseRedis("192.168.122.213", 6300, "", "FLEDGG");
        AddSignalRInjection(container, resolver);
    }

    private void AddSignalRInjection(IContainer container,IDependencyResolver resolver)
    {
        var updater = new ContainerBuilder();

        updater.RegisterInstance(resolver.Resolve<IConnectionManager>());
        updater.Update(container);
    }
}

And this is the class AutofacContainer.

public class AutofacContainer
{
    public IContainer Container { get; set; }
    public AutofacContainer()
    {
        var builder = new ContainerBuilder();

        builder.RegisterHubs(Assembly.GetExecutingAssembly())
            .PropertiesAutowired();
        builder.RegisterType<Test>()
            .As<ITest>()
            .PropertiesAutowired();

        Container = builder.Build();
    }
}

Now the official documentation SignalR Redis from Microsoft indicates that I should point GlobalHost.DependencyResolverto UseRedis.

    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }

Since I no longer use GlobalHostthe application (even if I use GlobalHost, there is absolutely no behavior in Redis) ( as Automatic integration with SignalR and Owin points to ):

A common mistake in OWIN integration is the use of GlobalHost. In OWIN, you create a configuration from scratch. You should not reference GlobalHost wherever OWIN integration is used.

Startup :

var resolver = new AutofacDependencyResolver(container);
resolver.UseRedis("serverIp", portNumber, "password", "channelName");

resolver AutofacDependencyResolver Redis PubSub. , , .

( Chrome , ).

, : SignalR Redis scaleout Autofac ( : , ).

!

EDIT: , :

resolver.UseRedis("serverIp", portNumber, "password", "channelName");

!

EDIT: , : resolver.UseRedis();, , ( ), - , " " Redis, subscribe "channelName", , : .

, , SignalR Autofac , Redis, , , Autofac, .

!

UPDATE: -, SignalR Autofac. Autofac.

+4
1

, , :

Redis, , , .

, Redis- , .

Redis Cluster node, node. , . .

Redis.

, SignalR , Redis, .

, Redis, , .

SignalR, !

+1

Source: https://habr.com/ru/post/1607780/


All Articles