更新: 好的,在我没有将MSDTC设置为群集资源(doh!)之后,我能够运行我的程序并且一切都很好,但我无法成功向其发送消息。挖掘后我发现虽然私有队列是在集群的一个节点上创建的,但它们不在另一个节点上(我从命令提示符运行NServiceBus.Host.exe),因此使用集群的应用程序看不到它们名称。我尝试从NServiceBus.Host.exe创建一个通用应用程序并将其添加到群集组,但这只是使群集组失效。我的问题仍然是:是否有人在集群环境中成功运行NServiceBus?
我正在尝试将NServiceBus安装到集群的win2k3主机上。提供的配置实用程序(runner.exe)抛出了一些我没有捕到的错误,现在它可以正常运行。运行NServiceBus.Host.exe时,我反复收到此错误:
System.Transactions.TransactionAbortedException:事务已中止。 ---> System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。 ---> System.Runtime.InteropServices.COMException(0x8004D01B):事务管理器不可用。 (HRESULT异常:0x8004D01B) 在System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName,Guid resourceManagerIdentifier,IntPtr managedIdentifier,Boolean& nodeNameMatches,UInt32& whereaboutsSize,CoTaskMemHandle& whereaboutsBuffer,IResourceManagerShim& resourceManagerShim) 在System.Transactions.Oletx.DtcTransactionManager.Initialize() ---内部异常堆栈跟踪结束--- 在System.Transactions.Oletx.OletxTransactionManager.ProxyException(COMException comException) 在System.Transactions.Oletx.DtcTransactionManager.Initialize() 在System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory() 在System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(TransactionOptions属性) 在System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction tx) ---内部异常堆栈跟踪结束--- 在System.Transactions.TransactionStateAborted.CheckForFinishedTransaction(InternalTransaction tx) 在System.Transactions.EnlistableStates.Promote(InternalTransaction tx) 在System.Transactions.Transaction.Promote() 在System.Transactions.TransactionInterop.ConvertToOletxTransaction(交易事务) 在System.Transactions.TransactionInterop.GetDtcTransaction(交易事务) 在System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32超时,Int32操作,MQPROPS属性,NativeOverlapped *重叠,ReceiveCallback receiveCallback,CursorHandle cursorHandle,IntPtr事务) 在System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan超时,Int32操作,CursorHandle游标,MessagePropertyFilter过滤器,MessageQueueTransaction internalTransaction,MessageQueueTransactionType transactionType) 在System.Messaging.MessageQueue.Receive(TimeSpan timeout,MessageQueueTransactionType transactionType) 在d:\ BuildAgent-02 \ work \ 672d81652eaca4e1 \ src \ impl \ unicast \ NServiceBus.Unicast.Msmq \ MsmqTransport.cs:line 551
中的NServiceBus.Unicast.Transport.Msmq.MsmqTransport.ReceiveMessageFromQueueAfterPeekWasSuccessful()
有没有人成功地将NServiceBus放到群集服务器上,如果是这样,你是如何让它工作的?
答案 0 :(得分:3)
好的,所以我最终得到了它并作为通用应用程序工作。我找到的陷阱是:
答案 1 :(得分:3)
对于那些寻求更多指南的人,我写了一篇博文,详细介绍了这个过程。
查看Deploying NServiceBus in a Windows Failover Cluster。
我正在使用Windows Server 2008,但我相信大多数相同的规则都应该适用。
答案 2 :(得分:1)
好的,实际上在群集上设置MSDTC资源很有帮助,一旦你拥有它和MSMQ资源,那么一切正常,几乎看到更新问题。