我在ASP.NET MVC3上測試NServiceBus。目前,我能夠將命令消息發送到後端,並且消息處理程序正在監聽它。但是,當我嘗試發佈相同的消息時,消息處理程序不在監聽。用戶無法處理來自發布者的消息
我發現的問題是該消息未發佈到訂閱者的隊列中。當我調試和檢查NServiceBusHost控制檯,它說
2012-01-19 22:53:35,042 [1] INFO NServiceBus.Unicast.UnicastBus [(null)] <(null
)> - Subscribing to SampleMessage.Person1WasCreated, SampleMessage, Version=1.0.
0.0, Culture=neutral, PublicKeyToken=null at publisher queue Test-web
我一遍又一遍地檢查了我的配置設置了幾天,對我來說似乎是正確的。任何人都可以請檢查我缺少的東西嗎?我試圖做的事情是從Web發佈消息,並且消息應該在後端處理(ServiceHost2)。
ASP.NET MVC3的Web.config
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
</configSections>
<MsmqTransportConfig InputQueue="Test-web" ErrorQueue="Test-web-error" NumberOfWorkerThreads="1" MaxRetries="5" />
<MsmqSubscriptionStorageConfig Queue="Test-subscriptionstorage" />
的Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Global.Bus = Configure.WithWeb()
.Log4Net()
.CastleWindsorBuilder()
.XmlSerializer()
.MsmqTransport().IsTransactional(false)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start()
;
}
App.Config中的ServiceHost2項目
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
</configSections>
<MsmqSubscriptionStorageConfig Queue="Service2-AC1-subscriptionstorage" />
<MsmqTransportConfig InputQueue="Service2-AC1" ErrorQueue="Service2-AC1-Error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="SampleMessage" Endpoint="Test-web" />
</MessageEndpointMappings>
</UnicastBusConfig>
<appSettings>
<add key="EndpointConfigurationType" value="ServiceHost2.EndpointConfig, ServiceHost2"/>
</appSettings>
</configuration>
EndpointConfig爲ServiceHost2
namespace ServiceHost2
{
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
Configure.With()
.Log4Net()
.CastleWindsorBuilder()
.MsmqTransport()
.MsmqSubscriptionStorage()
.XmlSerializer()
.UnicastBus().LoadMessageHandlers()
;
}
}
}
方法,其中發佈消息
public ActionResult CreatePerson(Person p)
{
var Person1WasCreated = new Person1WasCreated {Id = p.Id,Name = p.Name};
Global.Bus.Publish(Person1WasCreated);
return View();
}
由於控制器。
我看不到任何明顯的錯誤,你的日誌輸出會顯示你實際上正在訂閱事件......你確定它沒有發佈嗎?檢查您的訂閱隊列,看看是否有訂閱? – JimmyP
我再次檢查,它不在那裏。它說我訂閱了消息,但訂閱存儲「Service2-AC1-subscriptionstorage」中沒有任何值。很奇怪。僅供參考,使用NServiceBus 2.6 – kekewong
Subcribers存儲在發佈方(您的網站)。檢查Test-subscrptionstorage隊列? –