因此,我有一個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