因此,我有一个SPA(单页应用程序),AngularJS作为前端,.NET Web API作为后端(C#)。我需要在某些用户操作时生成SQL Server Reporting Services(SSRS)报告,即选择一些数据并按下按钮。这里是我现有的架构的一个粗略的说明:RabbitMQ与AngularJS/.NET Web API应用程序的架构
FRONT END BACK END SSRS Report
========== ========= ===========
**AngularJS Web page**-->**.NET Web API controller**-->**Intermediary class (passes arguments to report)** -->**Generate report and save to file**
这工作,但问题是,而正在生成报表的应用程序必须坐在那里,等待他们完成并在此期间,用户可以”不要做任何事情。如果有很多报告需要创建,例如100多个报告,则可能需要一两分钟的时间,这对我来说是不可接受的。
所以这就是RabbitMQ进来的地方。我想到的是.NET Web API控制器向服务器发送消息,一旦服务器收到它,就会对上面的中间类执行一个调用,报告,然后回复给客户,让他们知道报告已经生成。我想我需要使用RPC方案,所以我已经在RabbitMQ网站上完成了相应的教程,看起来很简单。
虽然我不知道,但这就是我的问题所在,就是如何从.NET Web API应用程序启动客户端和服务器。坦率地说,我现在有点失落,因为这是我第一次使用任何类型的消息传递的真实体验,我不太清楚如何处理它,架构明智。如果我可以在头脑中详细了解整个事情的工作方式,我可以从那里编写代码,但是现在我很难想象如何构建应用程序。
所以,问题:
我如何开始从.NET Web API控制器的RabbitMQ服务器和客户端?服务器和客户端应该是类库还是控制台应用程序,还是其他的东西?
我设想的体系结构会起作用还是有更好的方法?
任何关于如何接近我试图完成的一般建议将不胜感激。
1. @Evk,你所描述的与远程过程调用(RPC)模式相当,其中有一个客户端和一个服务器,前者向后者发送消息,然后接收消息(结果)?这在这里有更详细的描述:https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html。 – lukegf
2.如果是这样,您称为“另一个应用程序侦听这些消息并处理它们”对应于RPC模式中的客户端吗?另外,您说RabbitMQ服务器始终在运行,即使它不应该从控制器启动,也必须启动它。这是如何运作的?谁启动服务器?换句话说,假设我编码服务器,就像上面的RabbitMQ站点上的示例一样。那之后我该怎么处理它?我假设我必须将它部署在某处并以某种方式对其进行配置,以便它始终处于运行状态。客户同样的问题。 – lukegf
@ user452103兔子只是一个或多个应用程序之间的消息总线(中介,代理)。在你的情况下,一个应用程序是你的asp.net web api服务。另一个应用程序生成报告(例如 - 单独的控制台或Windows服务应用程序)。如果使用RPC模式,则应用程序A(web api)会向应用程序B(windows服务)发送消息,要求生成报告。然后它会等待,直到应用程序B将返回一条带有操作结果的消息。至于谁开始兔子。在Windows上,您可以将兔子作为服务运行 - 然后与Windows一起启动。 – Evk