文章出處

回到目錄

這個文章其實是我心中的核心組件的第七回,確實在時間上有些滯后了,但內容并不滯后!本文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表達式功能更強大

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()