有没有人将NServiceBus安装到Microsoft集群服务器上?

时间:2010-03-18 18:48:53

标签: nservicebus cluster-computing windows-clustering

更新: 好的,在我没有将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放到群集服务器上,如果是这样,你是如何让它工作的?

3 个答案:

答案 0 :(得分:3)

好的,所以我最终得到了它并作为通用应用程序工作。我找到的陷阱是:

  1. 您需要添加.net Framework 功能或应用服务器角色 到成员服务器
  2. 您需要添加MSDTC和MSMQ资源 到群集(MSMQ将需要 你有MSDTC)
  3. 添加通用应用程序后 你需要NServiceBus.Host.exe 进入并修改属性 要检查的通用应用程序 “使用计算机的网络名称 名称“框,以便NServiceBus指向 到群集名称以使用MSMQ 不是成员服务器 目前正在运行它。

答案 1 :(得分:3)

对于那些寻求更多指南的人,我写了一篇博文,详细介绍了这个过程。

查看Deploying NServiceBus in a Windows Failover Cluster

我正在使用Windows Server 2008,但我相信大多数相同的规则都应该适用。

答案 2 :(得分:1)

好的,实际上在群集上设置MSDTC资源很有帮助,一旦你拥有它和MSMQ资源,那么一切正常,几乎看到更新问题。