C# 防止将计算机名称附加到终结点名称
我们已经使用NServiceBus开发了大量服务,我们正在从使用MSMQ传输转换为使用SQL Server传输 对于NSB托管的服务,这是相对简单的。但是我们在设置一些网站(asp.NETWebAPI)时遇到了问题 我们通过以下配置在网站内自托管:C# 防止将计算机名称附加到终结点名称,c#,sql-server,asp.net-web-api,nservicebus,transport,C#,Sql Server,Asp.net Web Api,Nservicebus,Transport,我们已经使用NServiceBus开发了大量服务,我们正在从使用MSMQ传输转换为使用SQL Server传输 对于NSB托管的服务,这是相对简单的。但是我们在设置一些网站(asp.NETWebAPI)时遇到了问题 我们通过以下配置在网站内自托管: NServiceBus.Configure.Serialization.Xml(); var bus = NServiceBus.Configure.With(/* specific assemblies */) .Castl
NServiceBus.Configure.Serialization.Xml();
var bus = NServiceBus.Configure.With(/* specific assemblies */)
.CastleWindsorBuilder(container)
.DefineEndpointName(
ConfigurationManager.AppSettings["nsb:EndpointName"])
.DefiningCommandsAs(t =>
t.GetCustomAttributes(typeof(/* our marker */), false)
.GetLength(0) > 0)
.DefiningEventsAs(t =>
t.GetCustomAttributes(typeof(/* our marker */), false)
.GetLength(0) > 0)
.SetEndpointSLA(new TimeSpan(0,10,0))
.UseNHibernateTimeoutPersister()
.UseNHibernateSubscriptionPersister()
.UseTransport<SqlServer>() //<-- Changed here
.UnicastBus()
.LoadMessageHandlers()
//.DoNotCreateQueues() //We create queues manually.
.CreateBus()
;
而当它创建MSMQ队列时,它会创建:
Service.Name
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
事实上,已经更新到SQL Server传输的订阅服务器正在寻找Service.Name
队列表来注册订阅
我做错了什么,或者需要什么其他信息来解决这个问题?我在特定的.net谷歌群上发布了这个问题。这是我从约翰·西蒙斯那里得到的解释: 原因是NServiceBus回调使用 一种内存中的字典,用于跟踪传出和传出的消息ID 消息ID进入,换句话说,当您这样做时 Bus.Send().在您的网站中注册(/*callback here*/),我们将添加一个 此内存字典中的项表示我们发送了一条消息 我们还存储回调委托,然后 接收消息时,我们会检查字典,并检查相关性 消息id匹配我们将触发回调委托 所以这意味着如果你扩展你的网站(例如一个网站场) 其中,如果主服务器 这些端点的队列名称与任何这些端点的名称相同 out端点可以拾取假定要发送到 特定的端点/计算机,由于回调 该消息不会在内存字典中退出 端点/机器 全文如下: 菲尔让我想到: 这是故意的。默认情况下,sql/rabbit/active将包括机器名。我们的As_A_服务器覆盖了以下内容:
Configure.ScaleOut(s=>s.SingleBrokerQueue());
原因是默认情况下支持回调
好的,在我们的例子中,我们没有使用回调-我们是发布者,不是客户,因此这正是我们需要的修复。谢谢。这让我找到了我们需要的解决方法(我们不是使用回调的客户机,我们是发布者)
Configure.ScaleOut(s=>s.SingleBrokerQueue());