【发布时间】:2014-09-26 18:09:38
【问题描述】:
我们已经使用 NServiceBus 开发了相当数量的服务,并且我们正处于从使用 MSMQ 传输切换到使用 SQL Server 传输的过程中。
对于 NSB 托管服务,这相对简单。但是我们在设置我们的一些网站 (asp.net web api) 时遇到了问题。
我们在网站内自行托管,配置如下:
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()
;
我唯一更改的行是 UseTransport<> 行(以前有 Msmq),以及暂时的 .DoNotCreateQueues() 行,因为我想强制它创建队列表(虽然我是在 IIS express 下本地运行)
问题是,当它创建队列表时,它会将我的机器名称附加到“基本”表的名称上。 IE。它创建的表(当EndpointName 应用程序设置为Service.Name 时)的格式为:
Service.Name.MYMACHINENAME
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
而当它创建 MSMQ 队列时,它会创建:
Service.Name
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
事实上,已经更新到 SQL Server 传输的订阅者正在寻找 Service.Name 队列表来注册他们的订阅。
我做错了什么或者需要什么其他信息来解决这个问题?
【问题讨论】:
标签: c# sql-server asp.net-web-api nservicebus transport