我需要实现一个简单的工作者集群,它们会创建包含大量pdf的文件zip文件。该架构现在看起来像这样:
一旦客户端要求新的zip文件,请求就会在Hangfire队列中排队。当群集中的某个节点空闲时,作业将启动。在执行作业期间,将通知客户端进度。由于集群,是必要的另一个组成部分:
我使用Redis来实现这个组件,并且感谢一些NuGet包(即Microsoft.AspNet.SignalR
,Microsoft.AspNet.SignalR.Redis
)和这个doc这是非常简单的,我唯一需要的是在Owin启动文件中添加一些新行;一个为工人:
public class WorkerStartup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDB");
GlobalHost.DependencyResolver.UseRedis("IP", 6379, String.Empty, "TOPIC");
app.MapSignalR();
app.UseHangfireServer();
}
}
一个用于WebAPI,它们是等于但是Hangfire配置:
public class ClientStartup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDB");
GlobalHost.DependencyResolver.UseRedis("IP", 6379, String.Empty, "TOPIC");
app.MapSignalR();
app.UseHangfireDashboard(); // The client only needs Hangfire dashboard
}
}
它就像一个魅力,Redis做得很好。我会尝试使用Azure Service Bus重新实现所有内容(基于链接here),我将包Microsoft.AspNet.SignalR.Redis
替换为Microsoft.AspNet.SignalR.ServiceBus
并替换为UseRedis
行,如:
GlobalHost.DependencyResolver.UseServiceBus("Endpoint=sb://XXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXX", "TOPIC");
但是,一旦我开始客户端/服务器通信,我得到:
无法成功初始化传输。尝试指定一个 不同的传输或根本不用于自动初始化。"
什么错了,应该没有问题......
答案 0 :(得分:1)
无法成功初始化传输。尝试指定不同的传输或根本不指定自动初始化。
要解决此问题,您可以enable tracing and log on your hub,您可以在浏览器控制台标签中查看您的应用程序正在使用哪种传输。
$.connection.hub.logging = true;
然后,您可以尝试在启动客户端连接时显式指定其他传输,并测试它是否有效。
$.connection.hub.start({ transport: 'specify transport that you want' })
目前,支持以下传输: