久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

SPB-設(shè)計機(jī)制-任務(wù)機(jī)制

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航: 上一頁

任務(wù)SpaceBuilder提供的一種基礎(chǔ)服務(wù),可以在配置文件中對任務(wù)進(jìn)行配置,然后這些任務(wù)會按照一定的時間間隔自動運(yùn)行。

SpaceBuilder很多功能都需要依賴任務(wù)來完成,比如:

  1. SpaceBuilder.Components.ViewsTask,用于對各種對象進(jìn)行計數(shù),但是并不是每次計數(shù)的變更都修改數(shù)據(jù)庫,而是把這些計數(shù)先保存在內(nèi)存中,然后每隔一段時間批量對數(shù)據(jù)庫進(jìn)行更新;
  2. SpaceBuilder.LuceneSearch.UserSearch.PersonUserIndexTask、SpaceBuilder.LuceneSearch.PostSearch.PostIndexTask,用于把數(shù)據(jù)庫中的變更定期更新到全文檢索的文件中;
  3. 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方法。

Spacebuilder096.jpg

例如,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代表一個線程。

  1. 針對每個線程中可以設(shè)置一個統(tǒng)一的時間間隔來執(zhí)行其中的Task,可以用分鐘、秒兩種單位來進(jìn)行設(shè)置,例如<Thread minutes="5">或者<Thread seconds="5">;
  2. 針對每個Task可以設(shè)置enabled(是否啟用該Task)、enableShutDown(如果執(zhí)行時出現(xiàn)錯誤是否允許關(guān)閉該Task)兩個屬性,這兩個屬性都是bool類型所以可以用“true”或“false”進(jìn)行配置;
  3. 針對每個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"];

三、典型用途

  1. SpaceBuilder.Common.CounterTask,用于對各種對象進(jìn)行計數(shù)。為了提升性能,但是并不是每次計數(shù)的變更都修改數(shù)據(jù)庫,而是把這些計數(shù)先保存在內(nèi)存中,然后每隔一段時間批量對數(shù)據(jù)庫進(jìn)行計數(shù)更新;
  2. SpaceBuilder.LuceneSearch.FileThreadIndexTask等,用于把數(shù)據(jù)庫中的變更定期更新到全文檢索的文件中;
  3. SpaceBuilder.Common.EmailTask,用于定期的把Email隊列的Email批量發(fā)送出去;
  4. SpaceBuilder.Common.UserVisitsTask,用于把訪客記錄定期的更新到數(shù)據(jù)庫中;


參考資料[ ]