我正在尝试立即设置MassTransit SignalR背板支持。我正在尝试遵循以下指南:https://masstransit-project.com/advanced/signalr/quickstart.html
这是我的Startup.cs中的MassTransit配置(从ConfigureServices
调用中调用:]
private void ConfigureMassTransit([NotNull] IServiceCollection services)
{
services.AddSignalR().AddMassTransitBackplane();
// creating the bus config
services.AddMassTransit(x =>
{
// Add this for each Hub you have
x.AddSignalRHubConsumers<ChatHub>();
x.AddSignalRHubConsumers<NotificationHub>();
x.AddBus(provider =>
{
var dnsResolutionService = provider.GetService<IDnsResolutionService>();
var logger = provider.GetService<IMainLogger>();
return MassTransitBusFactory.CreateBus(dnsResolutionService, logger, cfg =>
{
cfg.AddSignalRHubEndpoints<ChatHub>(provider);
cfg.AddSignalRHubEndpoints<NotificationHub>(provider);
});
});
});
}
目前,我正在使用以下中心进行尝试:
public class NotificationHub : BaseHub, INotificationHub
{
public NotificationHub([NotNull] ISessionService sessionService)
: base(sessionService)
{
}
public async Task Test(string message)
{
await Clients.All.SendAsync("NewNotification", "bla");
}
}
这是我的呼叫代码:
public Task RaiseSignalREvent()
{
var protocols = new IHubProtocol[] { new JsonHubProtocol() };
return _eventBus.Publish<All<NotificationHub>>(new
{
Messages = protocols.ToProtocolDictionary("Test", new object []{"blub"}),
});
}
该代码到目前为止显然仅用于测试。当我运行此程序并调用RaiseSignalREvent
时,我希望可以看到NotificationHub方法,但是,现在什么都没有发生。
以下是我考虑过的一些考虑因素:
我可能会误解发布中的“ Messages”参数是如何组装的。
配置错误。我正在从没有显示所有启动代码的服务中发布它。
我不确定MassTransit的工作方式,但是截至目前,我在服务中有两条Bus,详细位于Startup.cs。有一条总线来自ConfigureMassTransit方法,另一条来自在我连接到DI的服务中创建,该服务通常用于MassTransit。因此,基本上,该服务中有2辆巴士。这有关系吗?
任何人都可以帮助我确定我所面临的问题吗?
首先,我不确定您所说的“我配置了两条总线”是什么意思,但这听起来很糟糕。您在ConfigureMassTransit
方法中粘贴的内容看起来很好,这就是您所需要的。如果您在注册总线的其他地方共享更多代码,可能会有所帮助,可能会导致混乱。
我还没有真正使用SignalR,但是人们在初次启动时会错过的一个真正普通的事情是您必须启动总线。您需要在代码中的某个位置调用Start()
实例上的IBusControl
,否则将无法正常工作。
检查一些样本的https://masstransit-project.com/usage/configuration.html#web-application。
抱歉,如果您已经在这样做!