指定传递协议执行设置
当配置传递协议时,您可以定义数个可配置传递重试、失败以及超时处理的执行设置。本主题说明如何指定这些传递协议执行设置。
重试通知传递
当通知无法传递时,分发服务器可以尝试再次传递通知。您可以为通知类使用的每个传递协议配置一个重试计划。
重试逻辑在分发服务器工作项级别上应用。如果某工作项中的所有通知都无法传递,则认为分发服务器工作项本身出现了故障。分发服务器可以根据指定的计划,稍后重试传递分发服务器工作项。
当分发服务器重试工作项时,只会再次发送在上一个传递尝试期间无法传递的通知。如果出现的错误使分发服务器未能更新通知的传递状态,则分发服务器可以重试传递,但是可能在下一个重试尝试中重新发送重复的通知。
当您配置重试计划时,可以指定一个或多个重试延迟时间值。如果通知传递失败,则分发服务器将一直等到第一个重试延迟时间值指定的间隔时间过后才再次拾取工作项。如果通知再次传递失败,则分发服务器将等待第二个重试延迟时间,然后再次尝试传递。此过程将一直继续,直到用完所有的重试延迟时间值或直到未传递的通知过期为止,以其中较早者为准。
注意: |
---|
您可以为每个通知类(而不是为每个传递协议)指定一个到期时间。有关详细信息,请参阅指定通知到期时间。 |
示例
下表显示分发服务器如何使用三个重试延迟时间值来重试通知传递。
初始传递尝试 |
1:00 |
第一个重试延迟时间 = 15 分钟 |
1:15 |
第二个重试延迟时间 = 30 分钟 |
1:45 |
第三个重试延迟时间 = 60 分钟 |
2:45 |
重试延迟时间值不会影响分发服务器的触发计划。这些值表示最短的延迟时间;各尝试之间的实际延迟时间可能更长。
如果您的服务器出现长时间的停机,则可能是经过多个重试延迟间隔之后分发服务器都没有尝试进行重试。如果出现这种情况,则分发服务器将立即对那些在服务器重新联机后尚未过期的分发服务器工作项执行一次重试尝试。然后分发服务器恢复重试延迟计划,并等待下一个延迟间隔中指定的时间以再次进行尝试。
指定重试计划
- 如果您通过 XML 定义应用程序,则请在 RetrySchedule Element (ADF) 中定义各重试延迟时间。
- 如果您通过编程方式定义应用程序,则请在 ProtocolRetrySchedule 对象中定义各重试延迟时间,然后使用 ProtocolRetrySchedules 属性 (NMO) 在 NotificationClassProtocol 对象中将这些延迟时间添加到 ProtocolRetryScheduleCollection 中。
记录传递失败
分发服务器会将各项写入 Windows 应用程序日志以记录通知传递失败。您可以配置分发服务器记录每个传递协议的传递失败事件的方式及时间。
重要提示: |
---|
Notification Services 从外部传递系统中接收的错误反馈有限。多数失败会导致事件日志中出现一般“传递失败”错误。如果连续出现传递失败,则可能表示配置有问题。若要验证传递配置,请查看实例配置中的传递通道设置以及应用程序定义中的协议字段值。 |
您可以配置的第一个属性是必须出现多少次失败之后,分发服务器才能在应用程序日志中记录事件。第二个可以配置的属性是每次记录事件之间的最小间隔,而不管失败次数是多少。当在短时间内出现若干次失败时,使用这两个设置可使您控制分发服务器写入应用程序日志的事件数,从而防止应用程序日志发生事件泛滥。
例如,如果将失败次数设置为 5 并将间隔设置为 10 分钟,则必须出现五次失败之后分发服务器才记录错误。10 分钟之后,将再次开始对失败进行计数。出现另外五次失败之后,分发服务器将再次在应用程序日志中写入事件。
当开发应用程序时,您可能需要使用默认值,即失败次数为 1 且间隔时间为 0。但是,当应用程序投入生产后,请考虑使用较高的值以在失败信息需求与尽量减少过多的日志记录的需求之间实现平衡。
注意: |
---|
NSDiagnosticDeliveryChannel (Transact-SQL) 和 NSDiagnosticFailedNotifications (Transact-SQL) 存储过程有助于解决传递失败的问题。 |
配置记录事件之前的传递失败次数
- 如果您通过 XML 定义应用程序,则请在 FailuresBeforeLoggingEvent Element (ADF) 中定义记录事件之前的传递失败次数。
- 如果您通过编程方式定义应用程序,则请使用 FailuresBeforeEventLog 属性 (NMO) 定义记录事件之前的传递失败次数。
配置记录之间的间隔
- 如果您通过 XML 定义应用程序,则请在 FailureEventLogInterval Element (ADF) 中定义记录之间的间隔。
- 如果您通过编程方式定义应用程序,则请使用 FailureEventLogInterval 属性 (NMO) 定义记录之间的间隔。
连续失败之后停止传递
如果由于长时间的网络故障而不是由于暂时性的网络条件出现传递失败,则分发服务器可以停止工作项中的传递尝试以免引起网络泛滥。
您可以指定工作项中必须连续出现多少次传递失败之后,分发服务器才能取消对该工作项中的通知进行更多的传递尝试。当达规定次数时,分发服务器会将消息写入应用程序日志并将该工作项标记为已失败。在这种情况下,工作项中可能存在从未被尝试传递的通知。如果存在重试计划,则分发服务器将在下一个重试间隔拾取该工作项,并重试传递已失败的通知和从未尝试的通知。
配置停止传递之前的连续失败次数
- 如果您通过 XML 定义应用程序,则请在 FailuresBeforeAbort Element (ADF) 中定义连续失败次数。
- 如果您通过编程方式定义应用程序,则请使用 FailuresBeforeAbort 属性 (NMO) 定义连续失败次数。
限制多播接收者
对于每个传递协议,您还能限制可以接收单个多播的订阅方的数目。有关多播的详细信息,请参阅指定摘要或多播传递。
当您限制多播接收者的数目时,分发服务器会在达到规定数目后停止将订阅方添加到多播接收者列表。然后分发服务器启动一个新的列表,并将订阅方添加到这个新列表,直到达到规定数目为止。此过程将一直继续,直到工作项中的所有多播通知都添加到多播接收者列表为止。
重要提示: |
---|
SQL Server 2005 Standard Edition 中未提供多播设置。 |
配置多播接收者限制
- 如果您通过 XML 定义应用程序,则请在 MulticastRecipientLimit Element (ADF) 中定义多播接收者限制。
- 如果您通过编程方式定义应用程序,则请使用 MulticastRecipientLimit 属性 (NMO) 定义多播接收者限制。
设置工作项超时值
当分发服务器拾取工作项时,它会调用内容格式化程序以格式化通知,并调用传递协议以对通知进行打包并传递。如果工作项非常大,或者分发因任何原因而阻塞,则工作项可以使用分发服务器的一个线程并延迟处理其他通知。
如果您指定了某个传递协议的工作项超时值,则分发服务器将在指定的时间过后释放工作项。分发服务器会将工作项标记为已失败,并在传递协议具有重试计划的情况下再次拾取该工作项。
配置工作项超时值
- 如果您通过 XML 定义应用程序,则请在 WorkItemTimeout Element (ADF) 中定义工作项超时值。
- 如果您通过编程方式定义应用程序,则请使用 WorkItemTimeout 属性 (NMO) 定义工作项超时值。
请参阅
概念
其他资源
Notification Services 存储过程 (Transact-SQL)
配置传递协议
定义通知类
定义 Notification Services 应用程序