Я тестирую NServiceBus на ASP.NET MVC3. На данный момент я могу отправить сообщение команды на бэкэнд, и обработчик сообщения прослушивает его. Но когда я пытаюсь опубликовать одно и то же сообщение, обработчик сообщений не прослушивает.Подписчик не может обработать сообщение от издателя
Проблема, которую я обнаружил, заключается в том, что сообщение не публикуется в очереди абонента. Когда я отладка и проверка 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
я снова и снова проверил мои настройки конфигурации в течение нескольких дней, и это кажется правильным для меня. Может кто-нибудь, пожалуйста, проверьте за мной, что мне не хватает? То, что я пытаюсь сделать, это опубликовать сообщение из Интернета, и сообщение должно обрабатываться на бэкэнд (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». Очень странно. FYI, im с использованием NServiceBus 2.6 – kekewong
Подписчики хранятся на стороне издателя (на вашем веб-сайте). Проверьте очередь тестирования-subscrptionstorage? –