'新邮件到达前' 和 '新邮件到达后' 类型代理有什么区别



Technote (troubleshooting)


问题

“新邮件到达前”和“新邮件到达后”类型代理有什么区别?当用到这些类型代理时应该有哪些考量呢?

解决问题

执行代理的服务器任务

“新邮件到达前”代理由 Router 任务而不是由代理管理器(AMGR)执行。当代理被设为“在新邮件到达前”触发时,Router 任务先执行指定的代理,然后在将邮件传递给收件人。几乎是在收到新邮件后立即执行代理。

“新邮件到达后”代理由代理管理器(AMGR)执行。此类型的代理并非在完成邮件邮递后立即执行,而是将状态从“已触发”改为“按计划执行”。之后,会被移到符合条件的队列中执行。从已触发状态到执行可能需要经过几分钟或较长时间,取决于先前在符合条件的队列中已有多少代理排队等待执行。

允许的代理数

每个数据库仅允许启用一个“新邮件到达前”代理。(可以允许其他“新邮件到达前”代理存在,但必须禁用)

每个数据库允许启用多个“新邮件到达后”代理。注意,如果同时启用多个数据库中的多个“新邮件到达后”代理,服务器的性能会受到影响。

文档处理机制的区别

取决于代理触发条件,可能会采用不同的文档处理方式。

如果代理触发条件是“新邮件到达前”,对于每封送达的邮件,代理执行一次。因此,建议使用 NotesSession 类的 DocumentContext 属性(对于LotusScript开发人员),或者使用 AgentContext 类的 getDocumentContext 属性(对于Java开发人员)获取新邮件的句柄并正确处理它。

如果代理触发条件是“新邮件到达后”,从代理被触发到实际运行之间可能会间隔几分钟。此时,出问题的数据库可能会收到多封邮件。因此,建议使用 NotesDatabase 类的 UnprocessedDocuments 属性(对于LotusScript开发人员)或 AgentContext 类的 getUnprocessedDocuments 属性(对于Java开发人员)对代理未处理的文档集进行处理。

问题的关键在于“新邮件到达前”代理每次处理一个文档,而“新邮件到达后”代理在按计划执行时可以一次处理多个文档。

除非对代理响应时间要求很高,在大多数情况下选择“新邮件到达后”触发条件可以提高代理执行效率,单次执行就可以处理多个文档。

“新邮件到达后”代理的执行间隔和默认的延迟时间

通过在 Notes.ini 参数可以设定定时代理执行间隔(以分钟计),也决定了代理执行的频率。下列参数的值都可以被调小(相应代理执行频率提高了),然而,可能会对服务器的性能产生潜在的影响。当服务器性能受到影响时,可以把参数的值试着调大一些,目的是在提高性能和代理执行延迟时间之间求得平衡。

注意:下列参数的细节请参考 Domino 管理帮助文档中的相关条目,主题是“代理在期望的时间内不运行”,“提高代理管理器的性能” 和“Notes.ini的设置”

AMgr_NewMailAgentMinInterval
这个参数指定了两次执行同类“新邮件触发事件”代理的最短间隔(以分钟为单位)。默认值是0(允许立即执行)。与 AMgr_DocUpdateAgentMinInterval 相似,设置参数值会使得代理执行频率降低。

AMgr_NewMailEventDelay
这个参数指定了在新邮件到达后,代理管理器执行“新邮件触发事件”代理之前的延时时间(以分钟为单位)。默认值是1分钟。和 AMgr_DocUpdateEventDelay 相似,参数可以保证代理运行的间隔不小于设定的延迟时间值。当代理执行时,它也负责处理其他(如果存在)在最近一次执行后安排进来的事件。设置较大的时间间隔会使得代理执行频率降低,从而使占用服务器的时间也降低。同理,如果文档更新并不频繁,您可以将时间间隔改小,使代理执行频率提高。

“新邮件到达前”代理的性能考量,限制和用法

由于 Router 任务负责执行“新邮件到达前”代理,推荐您将代理程序精简并保持高效,避免对邮件路由产生影响。因为效率考量至为重要,所以在设置“新邮件到达前”代理时需要遵循以下限制:

  • 不允许代理调用其他代理。
  • 不允许代理修改附件。允许代理检查和拆离附件。
  • 除收件箱之外,外来邮件还可以被拷贝到另一个指定的文件夹中。
  • Domino 服务器严格限定了代理执行时间(默认是30秒),限制对“新邮件到达前”类型的代理生效,和服务器文档中定义的“LotusScript/Java 最多执行时间:”不同,后者设定的是其他类型的代理执行时间,但不适用于“新邮件到达前”代理。
  • “新邮件到达前”代理执行时间可以通过服务器配置文档 > 路由器/SMTP > 限制和控制 > 邮递控制 选项卡配置,这个域的标题为“预邮递代理超时”(域名为"NewMailAgentTimeout")。
  • 使用 LotusScript NotesSession 类的 DocumentContext 属性处理外来邮件文档对象。例如:

Dim session as New NotesSession
Dim doc as NotesDocument
Set doc = session.DocumentContext
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值