我想學習消息系統。我發現RabbitMq和NServiceBus在幾個地方一起使用。我的問題是NServiceBus和兔子MQ或卡夫卡
- 如果我使用RabbitMQ那麼爲什麼我需要NServiceBus?反之亦然
- 什麼NServiceBus可以做,但RabbitMQ或Kafka不能?
- 我可以一起使用NServiceBus和kafka嗎?或者Apache-Kafka不需要NServiceBus
我想學習消息系統。我發現RabbitMq和NServiceBus在幾個地方一起使用。我的問題是NServiceBus和兔子MQ或卡夫卡
幾年前,我問自己同樣的問題。我在尋找NServiceBus來處理不同的消息隊列,但問題是一樣的。
我決定不使用NServiceBus。
6個月後,我意識到我已經重建了NServiceBus的一半......只有更差的。
爲什麼需要NServiceBus與RabbitMQ相當的問題是問你爲什麼需要帶有ASP.NET MVC,WinForms或XAML的.NET Framework,或者.NET的任何內置庫附帶,當你有公共語言運行時。
CLR應該不夠嗎?
當然不是。運行代碼可以執行的運行時(MSIL解釋器和執行引擎)不足以提高生產力。
當然,你可以編寫命令行應用程序,它接受輸入併產生輸出。但是嘗試構建一個沒有公共庫的真實應用程序 - 沒有內置的SQL Server驅動程序;沒有任何第三方控件或庫。構建一個沒有System.Windows命名空間的Windows桌面應用程序。
您需要這些庫來爲您提供集合,數據庫訪問,窗口對象和UI控件。
同樣,RabbitMQ爲您提供開始工作所需的一切,但不足以維持生產力。
當然,您可以抓取RabbitMQ的.NET驅動程序,並開始生成和使用消息。
有一段時間,這將工作得很好。
很快,您會發現自己在驅動程序周圍創建了一個包裝,因此您可以減少需要編寫的代碼量。
然後你會發現自己需要應對ack vs nack,你會爲此創建一個簡單的API。
然後,需要死信隊列會隨着nack調用彈出,並且你會將它包裝到你的API中 - 當然,與rabbitmq驅動程序相比,它是簡化的。
最終,您會想要處理有害消息 - 格式錯誤並導致異常的消息。再一次,你不想爲此編寫一次性代碼,所以你會寫一個庫來處理它。
該列表會繼續顯示。
從現在開始6個月後,您會發現自己正在使用一個半寫的,幾乎沒有指定的,無法測試的庫,它只模仿NServiceBus(或MassTransit或您選擇的任何其他服務總線庫)的價值和功能。
我不會說你必須使用NServiceBus。我想說你應該學習RabbitMQ如何工作,沒有它。但是,一旦超越了發送和接收消息的基礎,NServiceBus和其他服務總線實現的價值就會非常快速地變得非常明顯。
我終於有了一個簡潔的答案! 「爲什麼需要將NServiceBus與RabbitMQ結合使用的等價問題是詢問爲什麼您需要帶有ASP.NET MVC,WinForms或XAML的.NET Framework或.NET附帶的任何內置庫,當你有命令語言運行時。「宣佈我要發推。 –
@Derick很好的解釋。非常感謝您花時間解釋這一點。現在已經足夠明確 – MJK
謝謝,寫得很好。 –
看來社區對NServiceBus中卡夫卡運輸的支持如下:https://docs.particular.net/nservicebus/kafka/ (自己還沒有嘗試過)。
相關的第二個問題(http://stackoverflow.com/questions/9558128/specific-advantages-of-nservicebus-over-plan-rabbitmq) – vappolinario
@vappolinario感謝您的支持。卡夫卡是否一樣? – MJK
我從來沒有使用過卡夫卡,所以我不知道 – vappolinario