Я в полной растерянности относительно того, почему я испытываю эту проблему. Я новичок в NServiceBus и до сих пор установил простой простой «сервер», который прослушивает сообщения, отправленные веб-приложением. Сервер запрашивает пользовательскую инициализацию (IWantCustomInitialization) и использует пользовательский компоновщик для Castle Windsor 2.5.1 . Этот пользовательский компоновщик в основном является копией того, который поставляется с исходным кодом NServiceBus, с двумя незначительными изменениями, чтобы отойти от методов, которые устарели в Windsor 2.5.
Обратите внимание, что мой код делит экземпляр контейнера с NServiceBus.
Проблема, с которой я сталкиваюсь, заключается в том, что каждое сообщение, отправленное веб-приложением, обрабатывается сервером пять (5) раз. В файлах журнала есть пять записей для каждой попытки, а пятая попытка выглядит следующим образом:
2011-03-28 16:04:10,326 [Worker.8] DEBUG NServiceBus.Unicast.UnicastBus [] - Calling 'HandleEndMessage' on NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule
2011-03-28 16:04:10,327 [Worker.8] DEBUG NServiceBus.Unicast.UnicastBus [] - Calling 'HandleEndMessage' on Server.NHibernateSessionMessageModule
2011-03-28 16:04:10,341 [Worker.8] DEBUG NServiceBus.Unicast.UnicastBus [] - Calling 'HandleError' on NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule
2011-03-28 16:04:10,342 [Worker.8] DEBUG NServiceBus.Unicast.UnicastBus [] - Calling 'HandleError' on Server.NHibernateSessionMessageModule
2011-03-28 16:04:10,344 [Worker.8] ERROR NServiceBus.Unicast.Transport.Msmq.MsmqTransport [] - Message has failed the maximum number of times allowed, ID=80cffd98-a5bd-43e0-a482-a2d96ca42b22\20677.
У меня есть нет указание, почему сообщение терпит неудачу, и я не знаю, где копать для получения дополнительной информации / вывода.
Конфигурация «конечная точка» выглядит следующим образом:
public void Init()
{
container = Windsor.Container;
NServiceBus.Configure.With().CastleWindsor251Builder(container).XmlSerializer().MsmqTransport().IsolationLevel(System.Transactions.IsolationLevel.Unspecified);
var masterInstaller = new NotificationServerInstaller();
masterInstaller.Install(container, null);
}
Обработчик сообщений на данном этапе действительно изобретен и выглядит следующим образом:
public class NewUserMessageHandler : IHandleMessages<NotifyNewUserMessage>
{
private readonly IGetUserQuery _getUserQuery;
public NewUserMessageHandler(IGetUserQuery getUserQuery)
{
_getUserQuery = getUserQuery;
}
public void Handle(NotifyNewUserMessage message)
{
var result = _getUserQuery.Invoke(new GetUserRequest { Id = new Guid("C10D0684-D25F-4E5E-A347-16F85DB7BFBF") });
Console.WriteLine("New message received: {0}", message.UserSystemId);
}
}
Если первая строка в методе-обработчике закомментирована, сообщение обрабатывается только один раз.
Я обнаружил в сети некоторые сообщения / темы (включая StackOverflow), в которых говорится о схожих проблемах, в частности http://tech.groups.yahoo.com/group/nservicebus/message/5977 и Кто-нибудь использует Ninject 2.0 в качестве nServiceBus ObjectBuilder? - но у меня нет не удалось решить мою проблему.
Я был бы очень признателен за любую помощь. Я n00b в NServiceBus!