【问题标题】:Distributed architecture with MassTransit, RabbitMQ and SignalR具有 MassTransit、RabbitMQ 和 SignalR 的分布式架构
【发布时间】:2016-05-26 09:44:21
【问题描述】:

我在 MassTransitrabbitmq 的帮助下开发分布式应用程序

我必须提供在网页上生成报告的能力,而无需通过单击按钮重新加载页面,我还应该调用 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);
    }

但据我了解,这不是更好的方法,因为我在所有数据准备期间都保持连接。

我阅读了很多文章,并找到了三种方法。首选哪种方式?

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

【问题讨论】:

    标签: c# asp.net-mvc rabbitmq signalr masstransit


    【解决方案1】:

    我使用 SignalR 的 hubs 执行此操作,并使用常规 MassTransit 消费者观察服务器上的事件。当观察到事件时,我触发事件处理程序,该处理程序使用集线器向连接的客户端分派。这样,事件会立即推送到浏览器,而不会在控制器中的服务器上留下未决的异步调用。

    您可以在 Fooidity 中看到这一点,它做了类似的事情:

    https://github.com/phatboyg/Fooidity/blob/develop/src/Fooidity.Management.Web/Hubs/ApplicationHubEventHandler.cs#L18

    使用GlobalHost解析Hub,然后在Hub上提升方法。可以使用组来区分事件上下文,这是按节点处理的 SignalR 功能。因此,只要每个节点都在观察事件,客户端就可以连接到任何集线器并得到通知。这非常适合负载平衡,而不必为 SignalR 使用繁重的集群背板——因为 RabbitMQ 对于事件分发来说是超级轻量级​​的。

    您也可以使用非持久队列来执行此操作,这会使其速度更快——因为服务器重置/连接断开比代理崩溃的可能性更大。

    身份验证在 ApplicationHub 内部处理,如相邻源文件所示: https://github.com/phatboyg/Fooidity/blob/develop/src/Fooidity.Management.Web/Hubs/ApplicationHub.cs

    看看吧,希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多