关于队列的内容较多,咱得多分几部分来说,讲到哪是哪吧。数据库
每当咱在Exchange里查看队列的时候,咱们会看到队列分红好几个组,每一个邮箱数据库都有本身的目标队列,DAG、AD站点也是,AD林也是一个队列,最后最多的就是外部SMTP域队列。缓存
当传输服务处理队列里的邮件时,它首先会尝试投递队列里的第一封邮件,若是邮件投递成功,传输服务会去告诉传输高可用系统(后边的章节里会介绍到)这封邮件投递成功。若是不成功,那么邮件会留在队列里,而后过段时间进行重试。当重试次数打到某个预设值时,或者是重试的间隔超时,这封邮件就被视为未送达,而后返回发送者一个NDR报告。服务器
Exchange不一样版本之间的队列行为各有千秋,可是基本目的都差很少,邮件进入队列直到它们被其余组件检索和处理投递完成。ide
队列类型:工具
不一样的队列类型对应不一样的做用,因此Exchange有多种队列类型也并不奇怪。首先是三种永久性队列:spa
提交队列(Submission Queue):提交队列里保存并组织邮件等待分拣器处理,任何刚刚抵达服务器的邮件都会被放到这个队列里,而后分拣器对此队列中检索邮件,肯定收件人的位置和路由,再重定向给相应的合适的其余队列。翻译
没法送达队列(Unreachable Queue):包含着没法路由给目的地的邮件,好比发一封邮件给一个没有MX记录的SMTP域,那么这封邮件就会出如今没法到达队列里,发送给无效收件人的邮件也会出如今这里。Exchange会周期性的重试这个队列里的邮件,当检测到路由更改的时候,也会进行重试。因此这里面的邮件要么就是退回一封NDR,要么就会被成功发送。每台服务器上只有一个没法送达队列,且该队列在日常没有内容的时候是不可见的(EMS和EAC都看不到,除非里头有东西)。代理
病毒邮件队列(Poison Message Queue):病毒邮件队列也一般为空且不可见,它里边儿保存(隔离)了一些被视为是病毒的邮件(废话),这些邮件一般会致使传输服务崩溃。病毒邮件队列里的邮件不会自动尝试从新提交,管理员须要手动去删除或者恢复它们。日志
而后是另外三种队列:blog
传递队列(Delivery Queue):最经常使用的队列,保存着经过使用SMTP传递到本地或者远程目标的邮件。每一个目的地都会有一个传递队列,若是目标服务是传输代理类型的链接器,那么非SMTP目标也会使用传输队列。每一个队列中的邮件传递完毕以后,该队列会空置一段时间,而后被自动删除,这个时间能够由Set-TransportService命令里的QueueMaxIdleTime参数来控制,默认为3分钟。
卷影冗余队列(Shadow Redundancy Queues):卷影队列在邮件传输时会保留邮件的冗余副本。
Safety Net:保留传输服务器成功传递的邮件备份。管理工具没法访问Safety Net队列。
关于最后两种负责传输系统冗余的队列,咱们在后面传输的高可用里会详细讲到,这里就暂且不提。
队列数据库
在Exchange 2010当中,全部队列信息被存储在一个ESE(Extensible Storage Engine)数据库中,默认位于%ExchangeInstallPath%\TransportRoles\Data\Queue中。使用ESE格式做为队列数据库,而不是面对一堆文件,因此队列数据库(Mail.que)也和邮箱数据库同样,有ESE事务日志文件(Trn*.log),检查点文件(Trn*.chk),以及保留日志文件(Tnres0001.jrs Tnres0002.jrs)。
Exchange 2013的队列数据库与Ex2010和Ex2007的不一样之处在于邮件消息是如何存放到队列数据库中的,Ex2007和Ex2010针对每封邮件单独进行操做,邮件量变大意味着大量对数据库里的表的增删操做,而Exchange 2013则将每一个小时的邮件汇集到一张表中,好比说在上午9点到10点钟到达的邮件归类到一张表中,10点准的时候,服务器会新建一张表,而后将后续邮件再放进去;若是前面的邮件都发送成功了,就把9点的那张表给删除掉。
EdgeTransport.exe.config文件中能够配置队列数据库的存放位置,你能够经过修改这个来将队列数据库移动到更合适的地方(重启Microsoft Exchange传输服务生效)。如图:
下表列出了图中经常使用几个参数的配置意思,这些参数不是最彻底的,能够参照Technet给出的全表(https://technet.microsoft.com/zh-cn/library/bb125022%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396#QueueDBFiles),对config文件里添加须要的项目并赋值以达到配置目的:
参数 |
含义 |
QueueDatabasePath |
指定队列数据库的默认位置,若是你要修改该位置,那么到目标位置建立好文件夹,而后中止传输服务,将队列数据库拷贝过去,而后重启传输服务便可 |
QueueDatabaseLoggingPath |
指定队列数据库事务日志文件的存放位置,不必定要和队列数据库放在一块儿 |
QueueDatabaseLoggingBufferSize |
指定在将事务记录写入到事务日志文件以前用于缓存它们的内存。默认为5MB。 |
QueueDatabaseLoggingFileSize |
指定事务日志文件大小。默认为5M |
QueueDatabaseOnlineDefragEnabled |
是否为队列数据库打开在线碎片整理(Exchange里翻译为联机……)默认状况下这个选项不存在config文件里,若是要关闭该功能则须要手动添加该项。 |
QueueDatabaseOnlineDefragSchedule |
队列数据库在线碎片整理计划任务开始时间,默认为凌晨1点 |
QueueDatabaseOnlineDefragTimeToRun |
指定在线碎片整理任务的最长时间,默认为3个小时。 |
若是手动更改了EdgeTransport.exe.config文件以后,每次安装CU以前都记得备份一下自定义的项目,由于CU和SP的更新里都会覆盖这些配置。其余的config文件也是这个道理。
另外,针对队列数据库的移动,Exchange在Scripts文件夹里提供了一个脚本“Move-TransportDatabae.ps1”,能够直接使用这个脚原本进行移动,须要目标文件夹所在磁盘有2GB的空间。打比方我如今要将队列数据库移动到D:\Exchange\Queues文件夹里,那么我就能够这么输入:
.\Move-TransportDatabae –QueueDatabasePath D:\Exchange\Queues\ –QueueDatabaseLoggingPath D:\Exchange\Queues\
今天就先聊到这里,关于队列后边还有不少内容。下一节咱们会讲讲队列的处理效率,还有如何去查看队列。下次见!