队列过程

在 Exchange Server中,可以使用 Exchange 工具箱或 Exchange 命令行管理程序中的队列查看器来管理队列。 有关队列的详细信息,请参阅 队列中的队列和消息

本主题介绍如何对队列执行以下过程:

  • 查看队列
  • 重试队列:当 Exchange 服务器无法连接到下一跃点时,队列将进入“重试”状态,服务器会定期尝试连接并传递消息。 手动重试队列时,可以通过强制立即连接尝试来替代计划的重试时间。
  • 重新提交队列:重新提交队列类似于重试队列,只不过消息将发回到提交队列供分类程序处理,而不是立即尝试连接到下一跃点。 如果对网络基础结构的更改阻止传递队列中的消息,则这很有用。
  • 挂起队列:新消息可以进入队列,正在传输到下一跃点的消息将离开队列,但否则,在手动恢复队列之前,消息不会离开队列。
  • 恢复队列:为状态为“已挂起”的队列重启传出消息传递。 恢复队列时,队列中消息的状态不会更改 (例如,状态为“已挂起”的消息将保持挂起状态,并且不会使队列) 。

有关队列中消息的过程,请参阅 队列中消息的过程

开始前,有必要了解什么?

  • 估计完成每个步骤时间:5 分钟

  • 若要查找并打开 Exchange 工具箱,请使用以下过程之一:

    • Windows 10:单击“启动>所有应用>Microsoft Exchange Server<版本>>Exchange 工具箱”。

    • Windows Server 2012 R2 或Windows 8.1:在“开始”屏幕上,单击左下角附近的向下箭头或从屏幕中间向上轻扫,打开“应用”视图。 Exchange 工具箱快捷方式位于名为 Microsoft Exchange Server Version> 的<组中。

    • Windows Server 2012:使用以下任一方法:

      • 在开始屏幕中,单击空白区域,并键入 Exchange Toolbox。
      • 在桌面或开始屏幕上,按 Windows 键 + Q。在“搜索”超级按钮中,键入 Exchange Toolbox。
      • 在桌面或“开始”屏幕上,将光标移到右上角或从屏幕的右边缘向左轻扫,以显示超级按钮。 单击“搜索”超级按钮,然后键入 Exchange Toolbox。

      当快捷方式出现在结果中时,则可以选择它。

  • 若要了解如何在本地 Exchange 组织中打开 Exchange 命令行管理程序,请参阅 Open the Exchange Management Shell

  • 有关在 Exchange 命令行管理程序中使用筛选器和标识值的详细信息,请参阅 在 Exchange 命令行管理程序中查找队列和消息

  • 你必须先获得权限,然后才能执行此过程或多个过程。 若要查看所需的权限,请参阅 邮件流权限主题中的"队列"条目。

  • 若要了解本主题中的过程可能适用的键盘快捷键,请参阅 Exchange 管理中心内的键盘快捷键

提示

是否有任何疑问? 请在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange OnlineExchange Online Protection

查看队列

使用队列查看器查看队列

  1. Exchange 工具箱的“ 邮件流工具 ”部分中,双击“ 队列查看器 ”以在新窗口中打开该工具。
  2. In Queue Viewer, click the Queues tab. A list of all queues on the server to which you're connected is displayed.
  3. You can use the Export List link in the action pane to export the list of queues. For more information, see How to Export Lists from the Exchange Management Consoles.

使用 Exchange 命令行管理程序查看队列

若要查看队列,请使用以下语法。

Get-Queue [-Filter <Filter> -Server <ServerIdentity> -Include <Internal | External | Empty | DeliveryType> -Exclude <Internal | External | Empty | DeliveryType>]

此示例显示名为 Mailbox01 的服务器上所有非空队列的基本信息。

Get-Queue -Server Mailbox01 -Exclude Empty

此示例显示本地 Exchange 服务器上包含 100 多条消息的所有队列的详细信息。

Get-Queue -Filter "MessageCount -gt 100" | Format-List

有关详细信息,请参阅 Get-Queue在 Exchange 命令行管理程序中查找队列和消息

使用 Exchange 命令行管理程序查看多个 Exchange 服务器上的队列摘要信息

Get-QueueDigest cmdlet 提供特定范围内所有服务器上的队列状态的高级聚合视图, (例如 DAG、Active Directory 站点、服务器列表或整个 Active Directory 林) 。

默认情况下,Get-QueueDigest cmdlet 显示包含 10 封或更多邮件的传递队列,而且结果每一到两分钟更新一次。 有关如何更改这些默认值的说明,请参阅 配置 Get-QueueDigest

注意

  • Get-QueueDigest 的结果中不包括订阅的边缘传输服务器上的队列。
  • Get-QueueDigest 在边缘传输服务器上可用,但结果仅限于服务器上的本地队列。

若要查看多个 Exchange 服务器上的队列摘要信息,请运行以下命令:

Get-QueueDigest <-Server <ServerIdentity1,ServerIdentity2...> | -Dag <DagIdentity1,DagIdentity2...> | -Site <ADSiteIdentity1,ADSiteIdentity2...> | -Forest> [-Filter <Filter>]

本示例显示有关邮件计数大于 100 的 Active Directory 站点中名为 FirstSite 的所有 Exchange 2013 或更高版本邮箱服务器上的队列的摘要信息。

Get-QueueDigest -Site FirstSite -Filter "MessageCount -gt 100"

此示例显示有关数据库可用性组中所有邮箱服务器上的队列的摘要信息, (DAG) 名为 DAG01,其中队列状态为“ 重试”值。

Get-QueueDigest -Dag DAG01 -Filter "Status -eq 'Retry'"

有关详细信息,请参阅 Get-QueueDigest

重试队列

重试传递队列时,会强制立即尝试连接并覆盖下一个计划的重试时间。 有关队列的计划重试时间的详细信息,请参阅 消息重试、重新提交和过期间隔

注意

  • 队列必须处于“重试”状态,此操作才能产生任何效果。
  • 如果连接未成功,则重置重试间隔计时器。

使用队列查看器重试队列

  1. Exchange 工具箱的“ 邮件流工具 ”部分中,双击“ 队列查看器 ”以在新窗口中打开该工具。

  2. 在“队列查看器”中,单击“ 队列 ”选项卡。将显示连接到的服务器上的所有队列的列表。

  3. Click Create Filter, and enter your filter expression as follows:

    1. Select Status from the queue property drop-down list.
    2. Select Equals from the comparison operator drop-down list.
    3. Select Retry from the value drop-down list.
    4. Click Apply Filter. All queues that currently have a Retry status are displayed.
    5. Select one or more queues from the list. Right-click, and then select Retry Queue. If the connection attempt is successful, the queue status changes to Active. If no connection can be made, the queue remains in a status of Retry and the next retry time is updated.

使用 Exchange 命令行管理程序重试队列

若要重试队列,请使用以下语法。

Retry-Queue <-Identity QueueIdentity | -Filter QueueFilter [-Server ServerIdentity]>

此示例重试本地服务器上状态为"重试"的所有队列。

Retry-Queue -Filter "Status -eq 'Retry'"

此示例在名为 Mailbox01 的服务器上重试名为 contoso.com 的队列。

Retry-Queue -Identity Mailbox01\contoso.com

如何知道操作成功?

若要验证是否已成功重试队列,请使用以下过程之一:

  • 在队列查看器中,验证 “状态”、“ 下一次重试时间”和“ 上次错误” 属性的值。

  • 在 Exchange 命令行管理程序中,将 QueueIdentity> 替换为<队列的标识,并使用以下语法验证属性值:

    Get-Queue -Identity <QueueIdentity> | Format-Table -Auto Identity,Status,LastRetryTime,NextRetryTime
    

重新提交队列

重新提交队列会将队列中的所有消息发送回提交队列,以便分类程序进行处理。 有关分类程序的详细信息,请参阅 邮件流和传输管道

注意

  • 不能使用队列查看器重新提交队列。 只能使用 Exchange 命令行管理程序。
  • 可以重新提交以下队列:
    • 状态为“重试”的传递队列。
    • "无法到达"队列。 队列中状态值为 Suspended 的任何消息不会重新提交。
  • 无法重新提交有害消息队列,但可以在队列中重新提交单个消息。 有关详细信息,请参阅本主题后面的 病毒消息队列中的重新提交消息 部分。
  • 可以在任何 Exchange 服务器上使用 Replay 目录将邮件导出到 .eml 文件并重新提交它们,而不是重新提交队列。 有关详细信息,请参阅 从队列导出消息

使用 Exchange 命令行管理程序重新提交队列

若要重新提交队列,请使用以下语法:

Retry-Queue <-Identity QueueIdentity | -Filter "Status -eq 'Retry'" -Server ServerIdentity> -Resubmit $true

此示例将重新提交位于 Mailbox01 服务器上任何传递队列中状态为"重试"的所有邮件。

Retry-Queue -Filter "Status -eq 'Retry'" -Server Mailbox01 -Resubmit $true

此示例将重新提交位于 Mailbox01 服务器上无法到达队列中的所有邮件。

Retry-Queue -Identity Mailbox01\Unreachable -Resubmit $true

有关详细信息,请参阅 Retry-Queue

如何知道操作成功?

若要验证是否已成功重新提交队列,请使用以下过程之一:

  • 在队列查看器中,验证队列的属性。

  • 在 Exchange 命令行管理程序中,将 QueueIdentity> 替换为<队列的标识,并运行以下命令来验证属性值:

    Get-Queue -Identity <QueueIdentity>
    

重新提交位于病毒邮件队列中的邮件

重新提交消息的一种特殊情况是有害消息队列。 不能像其他队列一样重新提交有害消息队列,但可以重新提交有害消息队列中的单个消息。

注意

  • 有害消息队列中的消息可能确实有害,或者可能是编写不当的传输代理或软件 bug 的受害者的有效消息。 如果不确定有害消息队列中消息的安全性,则应将消息导出到文件,以便对其进行检查。 有关详细信息,请参阅从队列导出邮件
  • 从有害消息队列重新提交消息的过程与从其他队列恢复挂起的消息的过程相同。 可以使用队列查看器或 Exchange 命令行管理程序。 有关恢复消息的详细信息,请参阅 恢复队列中的消息
  • 仅当队列包含消息时,病毒消息队列才可见。

使用队列查看器重新提交有害消息队列中的消息

  1. Exchange 工具箱的“ 邮件流工具 ”部分中,双击“ 队列查看器 ”以在新窗口中打开该工具。
  2. 在“队列查看器”中,单击“ 队列 ”选项卡。将显示连接到的服务器上的所有队列的列表。
  3. 选择有害消息队列。 In the action pane, select View Messages.
  4. Select one or more messages from the list, right-click, and select Resume.

使用 Exchange 命令行管理程序在有害邮件队列中重新提交邮件

若要重新提交病毒邮件队列中的邮件,请执行以下步骤。

  1. 在本地服务器上运行以下命令,查找消息的标识。

    Get-Message -Queue Poison | Format-Table Identity
    
  2. 在以下命令中使用在上一步中获得的邮件标识。

    Resume-Message <PoisonMessageIdentity>
    

    此示例将恢复病毒邮件队列中邮件标识值为 222 的邮件。

    Resume-Message 222
    

有关详细信息,请参阅 Resume-Message

如何知道操作成功?

若要验证是否已成功从有害消息队列重新提交消息,请使用以下任一过程验证消息是否不再在队列中:

  • 在队列查看器中,查看尝试重新提交消息的有害消息队列。

  • 在 Exchange 命令行管理程序中,运行以下命令:

    Get-Message -Queue Poison
    

如果重新提交的消息是有害消息队列中唯一的消息,并且队列不再可见,则这也是成功重新提交消息的指示。

挂起队列

可以通过挂起队列来停止邮件流,然后挂起队列中的一封或多封邮件。 有关详细信息,请参阅 在队列中挂起消息

注意

  • 可以暂停以下队列:
    • 具有任何状态的传递队列。
    • "无法到达"队列。 在手动恢复此队列之前,检测到配置更新时,消息将不再自动重新提交到分类程序。
    • 提交队列。 在手动恢复此队列之前,分类程序不会选取消息。
  • 暂停队列不会将队列中消息的状态更改为“已挂起”。

使用队列查看器暂停队列

  1. Exchange 工具箱的“ 邮件流工具 ”部分中,双击“ 队列查看器 ”以在新窗口中打开该工具。
  2. 在“队列查看器”中,单击“ 队列 ”选项卡。将显示连接到的服务器上的所有队列的列表。 可以创建筛选器,以便仅显示符合特定条件的队列。
  3. Select one or more queues, right-click, and then select Suspend.

使用 Exchange 命令行管理程序暂停队列

若要挂起队列,请使用以下语法:

Suspend-Queue <-Identity QueueIdentity | -Filter "QueueFilter" [-Server ServerIdentity]>

此示例将挂起本地服务器上邮件计数等于或大于 1,000 且状态为"重试"的所有队列。

Suspend-Queue -Filter "MessageCount -ge 1000 -and Status -eq 'Retry'"

本示例挂起位于 Mailbox01 服务器上的名为 contoso.com 的队列。

Suspend-Queue -Identity Mailbox01\contoso.com

有关详细信息,请参阅 Suspend-Queue

如何知道操作成功?

若要验证是否已成功挂起队列,请使用以下过程之一:

  • 在队列查看器中,验证队列的 “状态” 值是否为“重试”。

  • 在 Exchange 命令行管理程序中,将 QueueIdentity> 替换为<队列的标识,并运行以下命令来验证 Status 属性值:

    Get-Queue -Identity <QueueIdentity>
    

恢复队列

通过恢复队列,可以从状态为“已挂起”的队列重启传出消息传递。

注意

  • 只能恢复已暂停的队列。
  • 恢复队列不会更改队列中消息的状态。 例如,状态为“已挂起”的消息将保持挂起状态,在恢复队列后不会离开队列。

使用队列查看器恢复队列

  1. Exchange 工具箱的“ 邮件流工具 ”部分中,双击“ 队列查看器 ”以在新窗口中打开该工具。

  2. 在“队列查看器”中,单击“ 队列 ”选项卡。将显示连接到的服务器上的所有队列的列表。

  3. Click Create Filter, and enter your filter expression as follows:

    1. Select Status from the queue property drop-down list.
    2. Select Equals from the comparison operator drop-down list.
    3. Select Suspended from the value drop-down list.
  4. Click Apply Filter. All queues on the server that are currently suspended are displayed.

  5. Select one or more queues from the list, right-click, and then select Resume.

使用 Exchange 命令行管理程序恢复队列

若要恢复队列,请使用以下语法:

Resume-Queue <-Identity QueueIdentity | -Filter "QueueFilter" [-Server ServerIdentity]>

本示例恢复本地服务器上状态为"已挂起"的所有队列。

Resume-Queue -Filter "Status -eq 'Suspended'"

本示例恢复位于 Mailbox01 服务器上的名为 contoso.com 的"已挂起"传递队列。

Resume-Queue -Identity Mailbox01\contoso.com

有关详细信息,请参阅 Resume-Queue

如何知道操作成功?

若要验证是否已成功恢复队列,请使用以下过程之一:

  • 在队列查看器中,验证队列没有 “状态” 值“已挂起 (,例如”活动“、”连接“或”就绪) ”。

  • 在 Exchange 命令行管理程序中,将 QueueIdentity> 替换为<队列的标识,并运行以下命令来验证 Status 属性值:

    Get-Queue -Identity <QueueIdentity>