Sun Java System Messaging Server 6.3 管理指南

10.4.8 工作控制器檔案

工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。(如需有關工作控制器概念和通道關鍵字配置的資訊,請參閱8.7 工作控制器12.5.4 通道執行工作的處理區以及12.5.5 服務工作限制。)

工作控制器檔案 job_controller.cnf 用於指定以下通道處理資訊︰

imta.cnf file 中,您可以使用 pool 關鍵字指定處理區 (定義於 job_controller.cnf 中) 的名稱。例如,以下 job_controller.cnf 範例檔案的片段定義了處理區 MY_POOL

[POOL=MY_POOL]
job_limit = 12

以下 imta.cnf 範例檔案的片段指定了通道區塊中的處理區 MY_POOL

channel_x pool MY_POOL
channel_x-daemon

如果要修改與預設處理區配置相關聯的參數或增加其他處理區,則可以透過編輯 job_controller.cnf 檔案,然後停止並重新啟動工作控制器來完成。

工作控制器配置檔案中的第一個處理區用於不指定處理區名稱的所有請求。MTA 配置檔案 (imta.cnf) 中定義的 MTA 通道,可以透過使用後跟處理區名稱的 pool 通道關鍵字,將它們的處理請求導向特定處理區。該處理區的名稱必須比對工作控制器配置中的處理區名稱。如果工作控制器無法識別請求的處理區名稱,則該請求會被忽略。

在初始配置中定義了以下處理區:DEFAULTLOCAL_POOLIMS_POOLSMTP_POOL

10.4.8.1 使用範例

通常,如果您要將某些通道的處理與其他通道的處理區分開,可以將附加的處理區定義新增至工作控制器配置。您還可以選擇使用具有不同特性的處理區。例如,您可能需要控制某些通道可以處理的同步請求數目。可以透過建立具有工作限制的新處理區來完成此作業,然後使用 pool 通道關鍵字將這些通道導入更合適的新處理區。

除了處理區定義以外,工作控制器配置檔案還包含 MTA 通道表以及工作控制器用於為每個通道處理請求所必需的指令。兩種類型的請求分別稱為「主」和「從屬」。通常,當通道的 MTA 郵件佇列中儲存有郵件時,會呼叫通道主程式。主程式會將郵件移出佇列。

呼叫從屬程式以輪詢通道並挑選該通道上任何內送郵件。由於幾乎所有 MTA 通道均具有主程式,因此大多數通道不具有或不需要從屬程式。例如,經由 TCP/IP 處理 SMTP 的通道就不使用從屬程式,因為網路服務 (SMTP 伺服器) 將根據任何 SMTP 伺服器的請求接收內送 SMTP 郵件。SMTP 通道的主程式是 MTA 的 SMTP 用戶端。

如果與通道關聯的目標系統一次無法處理多封郵件,您需要建立一個工作限制為一的新型處理區:

[POOL=single_job]
job_limit=1

另一方面如果目標系統具有足夠的平行處理能力,您可以將工作限制設定為較高的值。

範例 10–1 顯示工作控制器配置檔案範例。表 10–6 顯示可用選項。


範例 10–1 UNIX 中的工作控制器配置檔案範例


!MTA Job Controller configuration file
!
!Global defaults
tcp_port=27442         (1)
secret=never mind
slave_command=NULL     (2)
max_life_age=3600      (3)
!
!
!Pool definitions
!
[POOL=DEFAULT]         (4)
job_limit=10           (5)
!
[POOL=LOCAL_POOL]
job_limit=10
!
[POOL=IMS_POOL]
job_limit=1
!
[POOL=SMTP_POOL]
job_limit=1
!
!Channel definitions
!
!
[CHANNEL=l]             (6)
master_command=msg-svr-base/lib/l_master
!
[CHANNEL=ims-ms]
master_command=msg-svr-base/lib/ims_master
!
[CHANNEL=tcp_*]         (7)
master_command=msg-svr-base/lib/tcp_smtp_client

上述範例中的主要項目 (編號位於括號中並以粗體表示) 為:

  1. 此全域選項定義了工作控制器在其上偵聽請求的 TCP 連接埠號。

  2. 為後續 [CHANNEL] 區段設定預設 SLAVE_COMMAND

  3. 為後續 [CHANNEL] 區段設定預設的 MAX_LIFE_AGE

  4. 此 [POOL] 區段定義名為 DEFAULT 的處理區。

  5. 將此處理區的 JOB_LIMIT 設定為 10

  6. 此 [CHANNEL] 區段適用於名為 l 的通道和 UNIX 本機通道。此區段中需要的唯一定義為 master_command,工作控制器會發出該指令以執行此通道。由於通道名稱中沒有萬用字元,所以通道必須完全相符。

  7. 此 [CHANNEL] 區段適用於名稱以 tcp_* 開頭的任何通道。由於該通道名稱中包含萬用字元,它將比對名稱以 tcp_ 開頭的任何通道。

新增額外處理區的範例

工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。請注意,job_controller 中設定的工作限制是針對每個處理區。因此,例如,如果您將 SMTP_POOLjob_limit 定義為 10,則在任一指定時間內,僅能有 10 個 tcp_smtp 用戶端程序在該處理區中執行。

在某些情況下,可能需要建立額外的 tcp_* 通道 (例如,用於特別緩慢的郵件站點的 tcp 通道)。最好是讓這些通道在不同的處理區中執行。原因為,如果建立了十個不同的 tcp_* 通道且均在 SMTP_POOL 中執行,則在任一指定時間內,每個 tcp_* 通道上可能僅有一個 tcp_smtp 用戶端在執行 (取決於是否存在有目標為所有 tcp_* 通道的郵件,並且是否指定 SMTP_POOLjob_limit 定義為 10)。如果系統負載很重,並且所有佇列中均有郵件等待透過各個 tcp_* 通道傳送出去,則效率會很低。您很可能會為其他 tcp_* 通道定義額外的處理區,以防止出現競爭槽的情況。

例如,假定我們設定了以下 tcp_* 通道:


tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword
tcp-yahoo-daemon

tcp_aol smtp mx keyword keyword keyword pool aol_pool
tcp-aol-daemon

tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword 
tcp-hotmail-daemon
...
tcp_sun smtp mx pool sun_pool keyword keyword keyword
tcp-sun-daemon

為使每個新通道有十個 tcp_smtp_client 程序,我們將在 job_controller.cnf 檔案中增加以下內容:


[POOL=yahoo_pool]
job_limit=10

[POOL=aol_pool]
job_limit=10

[POOL=hotmail_pool]
job_limit=10

 ...

[POOL=sun_pool]
job_limit=10

如需有關處理區的更多資訊,請參閱12.5.4 通道執行工作的處理區

表 10–6 工作主控台配置檔案選項

選項 

說明 

一般選項

說明

INTERFACE_ADDRESS=adapter

指定工作控制器應連結至的 IP 位址介面。指定的值 (配接卡) 可以是 ANYALLLOCALHOST 中的任何一個,也可以是 IP 位址。依預設,工作控制器連結至所有位址 (相當於指定 ALLANY)。指定 INTERFACE_ADDRESS=LOCALHOST 意味著工作控制器僅接受來自本地機器內的連線。這不會影響正常作業,因為工作控制器不支援機器之間的作業。但是,這在 HA 環境中可能並不適合,因為 HA 代理程式可能正在檢查工作控制器是否回應。如果正在執行 Messaging Server 的機器處於 HA 環境中,並具有一個「內部網路」配接卡和一個「外部網路」配接卡,並且您不信任防火牆對連線至高連接埠號的封鎖功能,您應考量指定「內部網路」配接卡的 IP 位址。

MAX_MESSAGES=integer

工作控制器將以內部記憶體結構保留有關郵件的資訊。如果建立大型儲存區,則可能需要限制此結構的大小。如果儲存區中的郵件數目超過了此處指定的參數,則有關後續郵件的資訊將不會保留在記憶體中。因為郵件始終被寫入磁碟,因此不會丟失,但是在工作控制器已知的郵件數目下降至此數目的一半之前,它們不會被遞送。此時,工作控制器將模擬 imsimta cache -sync 指令,掃描佇列目錄。最小值為 10。

預設為 100000。 

SECRET=file_spec

用於保護傳送至工作控制器的請求的共用機密。 

SYNCH_TIME=time_spec

工作控制器有時會掃描磁碟上的佇列檔案以檢查是否有遺漏的檔案。依預設,此作業在工作控制器啟動四小時後開始,每隔四小時執行一次。time_spec 的格式為 HH:MM/hh:mm/hh:mm。變數 hh.mm 是事件的間隔時間 (以小時 [h] 和分鐘 [ m] 為單位)。變數 HH:MM 是事件在一天中第一次應發生的時間。例如,指定 15:45/7:15 表示事件在 15:45 開始,並從此刻起每七小時十五分鐘發生一次。

TCP_PORT=integer

指定工作控制器應在其上偵聽請求封包的 TCP 連接埠。請勿變更此選項,除非該預設與您系統上的其他 TCP 應用程式發生衝突。如果確實要變更此選項,請變更 MTA 調校檔案 msg-svr-base/config/imta_tailor 中對應的 IMTA_JBC_SERVICE 選項,以便比對。TCP_PORT 選項將在全域套用,如果它顯示在 [CHANNEL] 或 [POOL] 區段中,則將被忽略。

處理區選項

說明

JOB_LIMIT=integer

指定處理區可以同時 (平行) 使用的程序的最大數目。JOB_LIMIT 將分別套用至每個處理區;工作的最大總數是所有處理區的 JOB_LIMIT 參數的總和。如果在區段外設定,則可以由未指定 JOB_LIMIT 的任何 [POOL] 區段用做預設。在 [CHANNEL] 區段中會忽略此選項。

通道選項

說明

MASTER_COMMAND=file_spec

指定工作控制器建立的 UNIX 系統程序要執行的指令的完整路徑 (執行通道並將該通道上的外寄郵件移出佇列)。如果在區段外設定,則可以由未指定 MASTER_COMMAND 的任何 [CHANNEL] 區段用做預設。在 [POOL] 區段中會忽略此選項。

MAX_LIFE_AGE=integer

指定通道主要工作的最長存在時間 (以秒為單位)。如果沒有為通道指定該參數,則使用全域預設值。如果未指定預設值,則使用 14400 (240 分鐘)。 

MAX_LIFE_CONNS=integer

除了最長存在時間參數以外,通道主要工作的存在期限還受其詢問工作控制器是否有郵件的次數的限制。如果沒有為通道指定該參數,則使用全域預設值。如果未指定預設值,則使用 300。 

SLAVE_COMMAND=file_spec

指定工作控制器建立的 UNIX 系統程序要執行的指令的完整路徑 (執行通道並輪詢通道上內送的所有郵件)。大多數 MTA 通道不具有 SLAVE_COMMAND。如果是這種情況,則應指定保留值 NULL。如果在區段外設定,則可以由未指定 SLAVE_COMMAND 的任何 [CHANNEL] 區段用做預設。在 [POOL] 區段中會忽略此選項。