文章出處
文章列表
這個文章其實是我心中的核心組件的第七回,確實在時間上有些滯后了,但內容并不滯后!本文MSMQ只是個引題,我確實不太想說它,它是微軟自己集成的一套消息隊列,寄宿在Window服務里,穩定性十在不敢恭維,而redis隊列我們選擇的驅動客戶端是ServiceStack.Redis,之所以選擇它就是因為它穩定,更新快,對于其它的驅動可能用上幾年都不會去更新,而ServiceStack.Redis一直走到redis客戶端的前沿!
Redis隊列實時和非實時:這個說的實時和非實時主要針對的是消費者這邊,消息生產者在生產消息后,Redis隊列里存儲了這些消息,而何時消費就是我們要關心的問題了,非實時是說,在后端有個輪訓服務定時從隊列里拿消息,這有一定的延時性;實時是說在消費者一邊建立Tcp長連接,當隊列有數據后馬上消費它,當沒有數據時線程處于掛起等待狀態!
大叔實時消息隊列的消費者實現(Redis隊列)
while (true) { var redis = Redis.Client.RedisManager.GetClient();//redis連接池 if (redis.GetListCount("queue1") == 0) //消息為空掛起 { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("隊列為空,掛起1秒"); Thread.Sleep(1000); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("從隊列拿出:" + redis.PopItemFromList("queue1")); } }
大叔非實時消息隊列的實現
非實時隊列主要是在消費者一方采用了某種調度機制,定時去redis隊列里去拿數據,邏輯沒什么復雜的,大叔采用的調度組件還是Quartz.Net,原因是它功能強大,配置靈活,解耦能力比較強!
配合Cron表達式功能更強大
文章列表
全站熱搜