首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 訊息佇列應用程式開發:IWebMessage 介面與服務核心類設計(二)

     編輯:關於C語言

IWebMessage 介面契約

CWorkerThreadAssembly 透過 IWebMessage 介面與外部組件解耦:


public interface IWebMessage {
  WebMessageReturn Process(string messageLabel, string messageBody, int appSpecific);
  void Release();
}
public enum WebMessageReturn { ReturnGood, ReturnBad, ReturnAbort }
  • ReturnGood:繼續處理下一條訊息。
  • ReturnBad:將訊息寫入錯誤佇列,不終止服務。
  • ReturnAbort:終止處理執行緒。

Release() 提供確定性資源釋放機制,補足 .NET 非確定性終結子的不足,確保昂貴資源(資料庫連線等)及時釋放。

命名空間組織

  • MSDNMessageService.Service:服務核心代碼,跨多檔案共享命名空間,免 using 互引。
  • MSDNMessageService.Interface:含 IWebMessage,使用者需引用。

服務類:ServiceControl

繼承 ServiceBase,實作 Windows 服務四大命令:


public class ServiceControl : ServiceBase {
  public static void Main() { ServiceBase.Run(new ServiceControl()); }
  public ServiceControl() {
    CanPauseAndContinue = true;
    ServiceName = "MSDNMessageService";
    AutoLog = false;
  }
  protected override void OnStart(string[] args) { /* 建立 CWorker */ }
  protected override void OnStop() { /* 停止所有 Worker */ }
  protected override void OnPause() { /* 暫停所有 Worker */ }
  protected override void OnContinue() { /* 繼續所有 Worker */ }
}

XML 配置檔範例

檔名同 .exe 但副檔名 .config:


<?xml version="1.0"?>
<configuration>
  <ProcessList>
    <ProcessDefinition ProcessName="Worker1" ProcessDesc="Message Worker with 2 Threads"
      ProcessType="AppSpecific" ProcessThreads="2"
      InputQueue=".\private$\test_load1" ErrorQueue=".\private$\test_error">
      <OutputList>
        <OutputDefinition OutputName=".\private$\test_out11"/>
        <OutputDefinition OutputName=".\private$\test_out12"/>
      </OutputList>
    </ProcessDefinition>
    <ProcessDefinition ProcessName="Worker2" ProcessDesc="Assembly Worker with 1 Thread"
      ProcessType="Assembly" ProcessThreads="1"
      InputQueue=".\private$\test_load2" ErrorQueue=".\private$\test_error">
      <OutputList>
        <OutputDefinition OutputName="C:\MSDNMessageService\MessageExample.dll"/>
        <OutputDefinition OutputName="MSDNMessageService.MessageSample.ExampleClass"/>
      </OutputList>
    </ProcessDefinition>
  </ProcessList>
</configuration>

兩種處理器範例:AppSpecific 循環轉發至多佇列;Assembly 載入外部組件處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved