Ily*_*lya 12 c# asp.net-mvc masstransit rabbitmq signalr
我正在MassTransit和rabbitmq的帮助下开发分布式应用程序
我必须提供在网页上生成报告而无需通过点击按钮重新加载页面的能力,我也应该调用Windows服务进行数据准备(该服务处理每个请求30秒 - 1分钟).
我基于此示例的第一次尝试:https://github.com/MassTransit/Sample-RequestResponse
[HttpPost]
public async Task<HttpStatusCodeResult> GenerateReport(string someJsonData)
{
var serviceAddress = new Uri(ConfigurationManager.AppSettings["BaseLineRecordService"]);
var client = this.Bus.CreateRequestClient<ICreateReportRequest, ICreateReportResponse>(serviceAddress, TimeSpan.FromHours(1));
ICreateReportResponse response = await client.Request(new CreateReportRequest());
reportHub.ShowRepordData(response); // Update data by SingleR
return new HttpStatusCodeResult(200);
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,这不是一个更好的方法,因为我在所有数据准备期间都保持联系.
我读了很多文章,我找到了三种方法.哪种方式更受欢迎?
1)喜欢这篇文章http://www.maldworth.com/2015/07/19/signalrchat-with-masstransit-v3/
2)作为第一个但使用Rest API调用而不是IIS端的消费者
3)本文的想法http://weblog.west-wind.com/posts/2013/Sep/04/SelfHosting-SignalR-in-a-Windows-Service
我使用SignalR的集线器执行此操作,并使用常规MassTransit使用者观察服务器上的事件.当观察到事件时,我触发事件处理程序,该处理程序使用Hub将其分派给连接的客户端.这样一来,事件推到浏览器的瞬间,不留一个异步调用在控制器服务器挂起.
你可以在Fooidity中看到这个类似的东西:
使用GlobalHost解析集线器,然后在集线器上引发方法.可以通过使用组来区分事件上下文,组是每个节点处理的SignalR特征.因此,只要每个节点都在观察事件,就可以将客户端连接到任何集线器并获得通知.这非常适用于负载平衡,而不必使用重型集群背板进行SignalR - 因为RabbitMQ是超级轻量级的事件分发.
您也可以使用非持久队列来实现,这使得它更快 - 因为服务器重置/连接丢失比代理崩溃更可能.
身份验证在ApplicationHub内部处理,如相邻的源文件所示:https: //github.com/phatboyg/Fooidity/blob/develop/src/Fooidity.Management.Web/Hubs/ApplicationHub.cs
检查一下,希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
5158 次 |
| 最近记录: |