我遇到了一个相当令人不快的 MSMQ 错误,按照网上提供的信息无法修复。这导致电子邮件(.EML 文件)进入 C:\inetpub\mailroot\Queue 并停留在那里而无法发送。
环境信息:相关服务器是 Windows Server 2012 R2。我的 Active Directory 域控制器是 2012 R2,域和林级别为 2012 R2。我最近从 Exchange 2010 升级,方法是创建 2012 R2 服务器并在其上安装 Exchange 2013 SP1,然后将其修补到 CU 19,运行正常并接受来自运行 MSMQ 的服务器的中继邮件(通过 telnet 测试)。
事件日志中显示的错误是此来源:
MSMQ
Event ID: 2164
"The Message Queuing service will not join the MyDomainName domain. An MSMQ Configuration (msmq) object exists in the new domain with an ID differing from the service ID. Please delete the MSMQ Configuration object in the new domain, restart the Message Queuing service, and log on again."
根据我掌握的信息,我建议采取两项措施。1. 从 Active Directory 中删除相关服务器的 msmq。2. 确保该服务器上的网络服务具有“创建 MSMQ 配置对象”的特定权限。
我已通过运行 MSMQ 的服务器上的 AD 删除了 msmq 对象,并等待它在我的域控制器周围复制。(并通过确认它在每个 DC 上都消失了来仔细检查)。
对于下一阶段,我尝试了重新启动和重启服务,这两种方法都具有相同的效果。我重新启动了消息队列服务(这样做还会重新启动消息队列触发器和 Net.Msmq 侦听器适配器服务)。
我收到两个新的 MSMQ 事件日志错误。
MSMQ
Event ID: 2116
"Message Queuing was unable to create the msmq (MSMQ Configuration) object in Active Directory Domain Services. Error c00e0025h"
直接跟着这个错误...
MSMQ
Event ID: 2164
"The Message Queuing service failed to join the computer's domain 'MyDomainName'. Error 0xc00e0025"
如果我再次重新启动服务,事件日志中就会出现此错误“消息队列服务不会加入 MyDomainName 域。新域中存在一个 MSMQ 配置 (msmq) 对象,其 ID 与服务 ID 不同。请删除新域中的 MSMQ 配置对象,重新启动消息队列服务,然后再次登录。”
现在...在 Active Directory 中我的服务器已经针对它重新创建了 msmq。
我绕了一圈。我考虑过重新安装 MSMQ,这需要删除应用服务器功能和 .Net 4.5。这是一台运行一些 RDP 和 IIS 功能的生产服务器,我担心这会清除设置并可能破坏服务器上运行的软件。
短期内,我编写了一个 C# 程序来手动处理电子邮件队列以使事情保持正常进行,但它并不能解决问题。:(
有人对要尝试什么或去哪里寻找有什么想法或建议吗?
答案1
安装 MSMQ 时您是否以域管理员身份登录?
尝试安装带有 Active Directory 集成的 MSMQ 时出现错误 0xC00E0033 https://blogs.msdn.microsoft.com/johnbreakwell/2009/10/21/error-0xc00e0033-when-you-try-and-install-msmq-with-active-directory-integration/
删除过时的 MSMQ Active Directory 对象 https://blogs.msdn.microsoft.com/johnbreakwell/2009/12/16/deleting-stale-msmq-active-directory-objects/
在域中重新安装 MSMQ 4.0 时请注意 https://blogs.msdn.microsoft.com/johnbreakwell/2007/05/15/watch-out-when-re-installing-msmq-4-0-in-a-domain/
答案2
我遇到了同样的问题,在 Windows 功能中卸载并重新安装 MSMQ 就可以解决这个问题。
答案3
事实证明,这与组策略有关,我希望某些用户能够以服务身份登录,而无需绕开每台 PC 进行设置。因此,我将他们添加到组策略中,以包括他们有权以服务身份登录的某些用户,这样做的效果是只允许那些用户登录,并阻止后台服务的现有用户正常工作。
学过的知识。