2012-12-10 65 views
5

在過去的9個月中,我一直在研究CQRS項目(我的第一個項目),這是一個沉重的學習曲線。我目前在我的寫模型中使用JOliver出色的EventStore,併爲我的閱讀模型使用PostGresSql。使用Redis的CQRS MQ

我的讀寫數據庫都在同一臺機器上,這意味着當對寫入數據庫進行更改時,在同一個同步調用中會更改讀取模型。

當我學習CQRS我覺得這是最好的一段路要走,因爲我曾與消息隊列/服務總線框架,如MassTransit,NServiceBus等沒有經驗

我現在是在一個點與大多數的我的體系結構已引入消息隊列框架。

今天,我遇到了Redis MQ,它是ServiceStack的一部分,而且因爲我們已經在基於Rest的HTTP客戶端使用ServiceStack,所以這似乎是正確的選擇。

我的問題是關於理解我需要知道的事情(或者如果我有任何誤解)來實現Redis MQ以及Redis MQ是否是正確的選擇?

現在根據我的理解,我將使用Redis MQ作爲寫入和讀取數據庫之間的持久隊列。一旦我的活動商店記錄了我的域中發生了某些事情,它就會發布到Redis MQ。偵聽事件/消息的服務將接收來自Redis MQ的事件/消息,並且一旦它處理完畢(即更新或寫入讀取模型),通知/響應就會返回到事件存儲庫,以告知事件存儲庫消息已被聽衆/訂戶接收和處理。

聽起來不錯?

另外Redis MQ架構會給我NSB,RavenDB,MassTransit等提供的一切嗎?

此外,我將部署到Windows 2008和2003服務器。 Redis對於這些操作系統是否穩定?

回答

2

現在,據我所知,我會使用Redis MQ作爲寫入和讀取數據庫之間的持久隊列 。

是的,這是正確的。

一旦我的活動商店記錄我的 域中發生了某些事情,它就會發布到Redis MQ。

是的,這可以通過幾種方式完成。它可以作爲持續存儲到事件存儲區的事務的一部分發生,也可以有一個帶外過程持續發佈事件存儲區中的事件。

一個通知/響應返回到事件存儲,以告訴消息已經被接收和處理由 聽衆/用戶事件 存儲。

通常會忽略回到事件發佈者的響應。這真正將發佈者從訂閱者中分離出來。你假設一旦消息發佈,所有感興趣的訂閱者都會處理它。如果發生什麼情況,應該記錄一個錯誤。

也將Redis的MQ架構給我的一切,NSB, RavenDB,MassTransit等提供?

我沒有運行Redis MQ的經驗,但我確實知道Redis支持pub/sub這是NSB和MassTransit的價值主張之一(而不是純粹的MSMQ)。除了pub/sub,MT和NSB提供的是sagas,至少Redis MQ似乎不支持那些開箱即用的。你可能從來沒有需要傳奇故事,所以這不應該自動成爲一種威懾。 RavenDB不是消息隊列,因此它不適用於此。

而且,我將部署到2008年Windows和2003服務器。 Redis 對於這些操作系統是否穩定?

我在2008 R2運行Redis的,它一直穩定,所以我認爲Redis的MQ將是穩定爲好。

+0

感謝您的幫助。我必須決定在我的情況下使用哪個持久消息隊列,但我認爲我需要花幾天時間來學習最好的東西。你會建議什麼? :) –

+1

我在生產中最常用的是NSB + MSMQ,但MT同樣有能力,但缺乏文檔。確保查看NSB的許可證以查看它是否一致。 Redis MQ似乎很有趣,但無法評論。總的來說,嘗試一些不同的東西,讓您更好地瞭解消息是如何成爲基礎架構的問題,並且不應該在應用程序的其他部分大顯身手。 – eulerfx

+0

再次感謝你的智慧:)。我有一些想法,NSB提供什麼,我只需要看看Redis MQ如何做(重試失敗的消息,如何查看失敗的消息或查看消息隊列以查看必須處理的消息等)。我需要看看NSB許可證,我們沒有那麼多的消息傳遞,此外在這個階段讀寫數據庫在同一臺機器上。 –

3

我認爲Redis中的消息隊列的ServiceStack實現更適合作業隊列方案 - 它將消息推送到Redis列表的末尾,然後使用Redis pub-sub通知偵聽訂閱者有消息從隊列中拉出。任何消費者都將爭奪消息。

對於事件採購,您可能對RabbitMQ提供的一種扇出或基於主題的消息傳遞拓撲結構更感興趣,但這並不妨礙您使用Redis數據結構自行構建此類事物。

+1

感謝您的回覆。在我的情況下,我只有一個用戶是我的讀取模型,因爲我想確保域模型(寫入)和讀取模型不會失去同步。在這種情況下,RedisMQ會好嗎? –

+2

是的,當前的RedisMQ實現是完美的爲您的需求。 – DanB

2

您可能對我的GitHub上的一個小項目感興趣,它是使用Redis的NServiceBus的隊列和持久性實現。 https://github.com/mackie1001/NServicebus.Redis

我不會把它叫做生產準備好,我想把它移植到NSB 4並做一些徹底的測試,但是它的肉已經完成了。

+0

感謝您的信息。 –