2015-09-01 4 views
0

Я пытаюсь собрать прототип с использованием Nservicebus, используя ненавязчивый режим, определяя пользовательские соглашения. Я начал пытаться запустить свою конечную точку в хосте NServicebus, но мне не удавалось собрать сообщение, которое я публикую. Я взял приложение с ненавязчивым примером, доступное от Nservicebus, и заменил его содержимое моими сообщениями и обработчиками. По-видимому, он обнаруживает сообщения на основе соглашения (я вижу его на выходе консоли при запуске приложения), но, похоже, не регистрируется для этих сообщений на основе обработчиков, которые у меня есть в приложении Server. Я не вижу, чтобы сообщение помещалось в очередь, и я не могу видеть активную или неактивную конечную точку в импульсе службы либо при запуске приложения.nservicebus ненавязчивый режим, не собирающий обработчики или обработка сообщений

Я пробовал много разных «исправлений» и просматривал интернет, переполнение стека и документацию Nservicebus и не нашел никакой информации, указывающей мне в правильном направлении.

Вот мой сервер конечной конфигурация:

BusConfiguration busConfiguration = new BusConfiguration(); 

busConfiguration.EnableInstallers(); 
busConfiguration.UsePersistence<InMemoryPersistence>(); 
busConfiguration.UseDataBus<FileShareDataBus>() 
    .BasePath(@"..\..\..\DataBusShare\"); 
busConfiguration.RijndaelEncryptionService(); 

busConfiguration.ApplyCustomConventions(); 

using (IBus bus = Bus.Create(busConfiguration).Start()) 
{ 
    Console.WriteLine("Press any key to exit."); 
    Console.ReadKey(); 
} 

public static void ApplyCustomConventions(this BusConfiguration busConfiguration) 
{ 

ConventionsBuilder conventions = busConfiguration.Conventions(); 
conventions.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Commands")); 
conventions.DefiningEventsAs(t => t.Namespace != null && t.Namespace.EndsWith("Events")); 
conventions.DefiningMessagesAs(t => t.Namespace != null && t.Namespace == "Messages"); 
conventions.DefiningEncryptedPropertiesAs(p => p.Name.StartsWith("Encrypted")); 
//conventions.DefiningDataBusPropertiesAs(p => p.Name.EndsWith("DataBus")); 
conventions.DefiningExpressMessagesAs(t => t.Name.EndsWith("Express")); 
conventions 
    .DefiningTimeToBeReceivedAs(t => t.Name.EndsWith("Expires") 
     ? TimeSpan.FromSeconds(30) 
     : TimeSpan.MaxValue 
); 
} 

Метод ApplyCustomConventions разделяется между моим издателем сообщений и конечной точкой сервера.

Вот моя конечная точка сервера .exe app.config:

<configuration> 
    <configSections> 
    <section name="RijndaelEncryptionServiceConfig" type="NServiceBus.Config.RijndaelEncryptionServiceConfig, NServiceBus.Core"/> 
    </configSections> 
    <RijndaelEncryptionServiceConfig Key="gdDbqRpqdRbTs3mhdZh8qCaDaxJXl+e7"/> 
</configuration> 

Там нет ошибки на публикацию и сообщение никогда не получил.

Обновление: Я сузил это, чтобы он не работал, когда я пытаюсь публиковать события, и конечная точка не будет подписана, если я не сделаю отображение конечной точки. Более того, даже после того, как я опубликовал событие с сопоставлением конечных точек, он по-прежнему не подхвачен моими обработчиками конечных точек.

У меня есть вопросы здесь. В ненавязчивом примере из Particular он не настраивает сопоставления конечных точек, чтобы иметь возможность отправлять команды и сообщения, он устанавливает конечную точку на основе имени сборки. Не работает ли это с событиями и публикуется? Я взял ненавязчивый пример и поместил одно сообщение в Message.dll и добавил один обработчик для этого события в Server.exe и изменил Client.exe, чтобы иметь возможность публиковать это событие, и он не работает. Я постараюсь опубликовать свой код где-нибудь, когда у меня появится шанс. Спасибо, парни.

+0

Можете ли вы поделиться код на Dropbox или GitHub? Предполагаю, вы это видели? http://docs.particular.net/samples/unobtrusive/#Nuget-v5_x –

+0

Для получения ServicePulse, чтобы увидеть сердцебиение конечной точки, вам нужно добавить плагин heartbeat: http://docs.particular.net/servicecontrol/plugins/heartbeat –

+0

У меня есть настройка импульсов обслуживания и включены необходимые Nugets. – Chris

ответ

1

При запуске конечной точки с ненавязчивым режимом убедитесь, что вы выполняете определения как в отправителе, так и в приемнике.

Также разместите здесь какой-либо код конфигурации конечной точки, который может помочь устранить неполадки.

Получаете ли вы какие-либо ошибки при выполнении отправки на конечной точке приема? В большинстве случаев возникает какая-то ошибка, которая может помочь устранить эту проблему.

+0

Добавил больше информации в исходное сообщение. – Chris

+0

В отношении вашего редактирования. Каждая созданная сборка имеет собственный набор очередей за кулисами, которые используются для транспортировки сообщения, и внутри .Net каждый другой проект создается в своей собственной сборке. Если вы издатель и подписчик находятся в одной и той же сборке (тот же проект), то я не думаю, что вам нужно делать сопоставление, но я мог бы ошибаться в этом предположении. Кроме того, если это помогло вам, пожалуйста, сделайте это как «ответ» или проголосуйте за меня. Я пытаюсь создать свои точки StackOverflow. :) – jinskeep

0

Я заметил, что в вашем app.config у вас нет определений конечных точек. Это необходимо как для проектов «frontend», так и для «backend», чтобы направлять сообщения в нужное место. Вот отрывок из того, что у меня это за приложение под названием «MyApplication»:

<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="myapplication.Commands" Endpoint="myapplication.Backend" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

Более подробную информацию об этом можно найти здесь: http://docs.particular.net/nservicebus/messaging/specify-message-destination

0

Обе конечные точки потребует ненавязчивые отображения. Конечная точка абонента должна быть настроена для подписки на сообщения.Смотрите здесь, как настроить абонента:

http://docs.particular.net/nservicebus/messaging/publish-subscribe/configuration

App.config будет выглядеть примерно так для абонента:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Assembly="Shared" Endpoint="Samples.PubSub.MyPublisher"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
</configuration> 
Смежные вопросы