WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機(jī)
SPB-設(shè)計機(jī)制-任務(wù)機(jī)制
來自站長百科
導(dǎo)航: 上一頁
任務(wù)是SpaceBuilder提供的一種基礎(chǔ)服務(wù),可以在配置文件中對任務(wù)進(jìn)行配置,然后這些任務(wù)會按照一定的時間間隔自動運(yùn)行。
SpaceBuilder很多功能都需要依賴任務(wù)來完成,比如:
- SpaceBuilder.Components.ViewsTask,用于對各種對象進(jìn)行計數(shù),但是并不是每次計數(shù)的變更都修改數(shù)據(jù)庫,而是把這些計數(shù)先保存在內(nèi)存中,然后每隔一段時間批量對數(shù)據(jù)庫進(jìn)行更新;
- SpaceBuilder.LuceneSearch.UserSearch.PersonUserIndexTask、SpaceBuilder.LuceneSearch.PostSearch.PostIndexTask,用于把數(shù)據(jù)庫中的變更定期更新到全文檢索的文件中;
- SpaceBuilder.Components.EmailTask,用于定期的把Email隊列的Email批量發(fā)送出去; …
下面主要介紹一下如何定義自己的任務(wù),定義一個任務(wù)一般分為兩個步驟:
- 開發(fā)一個Task;
在SpaceBuilder.config中進(jìn)行配置。
一、開發(fā)Task
編寫一個自己的Task非常簡單,只需要實現(xiàn)ITask接口即可。每次Task執(zhí)行時會自動調(diào)用Execute方法。
例如,F(xiàn)ileThreadIndexTask.cs代碼如下:
/// <summary> /// 定期把FileThread的變更情況更新到Lucene索引文件 /// </summary> public class FileThreadIndexTask : ITask { /// <summary> /// 每次更新索引的最大數(shù)目 /// </summary> private int count = 1000; #region ITask Members public void Execute(System.Xml.XmlNode node) { XmlAttribute countNode = node.Attributes["count"]; if (countNode != null) { int.TryParse(countNode.Value, out count); } IndexPosts(count); } #endregion }
二、配置Task
開發(fā)完Task以后,必須在SpaceBuilder.config中進(jìn)行配置,它才會自動運(yùn)行。以下代碼是一個典型的Task配置:
開發(fā)完Task以后,必須在SpaceBuilder.config中進(jìn)行配置,它才會自動運(yùn)行。以下代碼是一個典型的Task配置:
<Tasks> <Threads> <Thread minutes="5"> <task name="FileThreadIndexTask" type="SpaceBuilder.LuceneSearch.FileThreadIndexTask, SpaceBuilder.File.Web" enabled="true" enableShutDown="false" /> </Thread> </Threads> </Tasks>
SpaceBuilder中的所有Task都是在Tasks節(jié)點進(jìn)行配置的,其中Tasks/Threads/Thread代表一個線程。
- 針對每個線程中可以設(shè)置一個統(tǒng)一的時間間隔來執(zhí)行其中的Task,可以用分鐘、秒兩種單位來進(jìn)行設(shè)置,例如<Thread minutes="5">或者<Thread seconds="5">;
- 針對每個Task可以設(shè)置enabled(是否啟用該Task)、enableShutDown(如果執(zhí)行時出現(xiàn)錯誤是否允許關(guān)閉該Task)兩個屬性,這兩個屬性都是bool類型所以可以用“true”或“false”進(jìn)行配置;
- 針對每個Task除了enabled、enableShutDown兩個屬性外還可以配置任何其他的屬性,但是除這兩個屬性以外的屬性只能在自己的Task中進(jìn)行解析及使用.
例如:EmailTask:
int failureInterval = 15; //如果發(fā)送失敗,下一次多長時間再此發(fā)送(用分鐘表示) int numberOfTries = 10; //發(fā)送失敗后的重試次數(shù) // Get the failureInterval setting XmlAttribute failureIntervalNode = node.Attributes["failureInterval"]; XmlAttribute numberOfTriesNode = node.Attributes["numberOfTries"];
三、典型用途
- SpaceBuilder.Common.CounterTask,用于對各種對象進(jìn)行計數(shù)。為了提升性能,但是并不是每次計數(shù)的變更都修改數(shù)據(jù)庫,而是把這些計數(shù)先保存在內(nèi)存中,然后每隔一段時間批量對數(shù)據(jù)庫進(jìn)行計數(shù)更新;
- SpaceBuilder.LuceneSearch.FileThreadIndexTask等,用于把數(shù)據(jù)庫中的變更定期更新到全文檢索的文件中;
- SpaceBuilder.Common.EmailTask,用于定期的把Email隊列的Email批量發(fā)送出去;
- SpaceBuilder.Common.UserVisitsTask,用于把訪客記錄定期的更新到數(shù)據(jù)庫中;