2013-08-27 6 views
0

Я получаю странное поведение работающих сабсов NServiceBus, развернутых на службе облачного облака. Они никогда не получить ответ сообщения, никогда не проснуться ... хотя, если он развернут локально все работает отлично, а также сказание работает правильно, когда это на WebAPI роли облачного сервиса ...NServiceBus saga не обрабатывает сообщения на azure

public class EndpointConfiguration : IConfigureThisEndpoint, IWantCustomInitialization, 
    AsA_Worker, UsingTransport<AzureStorageQueue> 
{ 
    public void Init() 
    { 
     Feature.Disable<Gateway>(); 
     Feature.Disable<SecondLevelRetries>(); 

     Feature.Enable<TimeoutManager>(); 
     Feature.Enable<Sagas>(); 

     Configure.With() 
       .UsingContainer<AutofacContainerBuilder>() 
       .AzureConfigurationSource() 
       .AzureMessageQueue() 
       .QueuePerInstance() 
       .UseNHibernateSagaPersister() 
       .UseNHibernateSubscriptionPersister() 
       .UseNHibernateTimeoutPersister() 
       .UnicastBus(); 
    } 
} 

, что мой конфиг для NSB

<configSections> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    <section name="DBSubscriptionStorageConfig" type="NServiceBus.Config.DBSubscriptionStorageConfig, NServiceBus.NHibernate" /> 
    <section name="NHibernateSagaPersisterConfig" type="NServiceBus.Config.NHibernateSagaPersisterConfig, NServiceBus.NHibernate" /> 
    <section name="TimeoutPersisterConfig" type="NServiceBus.Config.TimeoutPersisterConfig, NServiceBus.NHibernate" /> 
    </configSections> 
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Service.InternalMessages" Endpoint="service" /> 
     <add Messages="Messages" Endpoint="service" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
    <DBSubscriptionStorageConfig> 
    <NHibernateProperties> 
     <add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider" /> 
     <add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver" /> 
     <add Key="connection.connection_string" Value="Data_Source;Connection Timeout=30;" /> 
     <add Key="dialect" Value="NHibernate.Dialect.MsSql2008Dialect" /> 
     <add Key="hbm2ddl.auto" Value="update" /> 
    </NHibernateProperties> 
    </DBSubscriptionStorageConfig> 
    <NHibernateSagaPersisterConfig> 
    <NHibernateProperties> 
     <add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider" /> 
     <add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver" /> 
     <add Key="connection.connection_string" Value="Data_Source;Connection Timeout=30;" /> 
     <add Key="dialect" Value="NHibernate.Dialect.MsSql2008Dialect" /> 
     <add Key="hbm2ddl.auto" Value="update" /> 
    </NHibernateProperties> 
    </NHibernateSagaPersisterConfig> 
    <TimeoutPersisterConfig> 
    <NHibernateProperties> 
     <add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider" /> 
     <add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver" /> 
     <add Key="connection.connection_string" Value="Data_Source;Connection Timeout=30;" /> 
     <add Key="dialect" Value="NHibernate.Dialect.MsSql2008Dialect" /> 
     <add Key="hbm2ddl.auto" Value="update" /> 
    </NHibernateProperties> 
    </TimeoutPersisterConfig> 

это конфиги, которые я использую для persisters

NServiceBus.Hosting.Azure, NServiceBus.NHibernate, NServiceBus.Core, NServiceBus.Azure, NServiceBus все v4.0.30319

Я использую AzureStorageQueue, а также я уверен, что я переопределен ConfigureHowToFindSaga с правильной ConfigureMapping и я ответив сообщение со всеми подали указано правильно ...

Я был бы очень признателен за любые идеи, спасибо.

ответ

0

Это будет интересно узнать. Я не вижу ничего явно неправильного.

Значит, это работает, он работает локально (с точно такой же конфигурацией?), И он работает при развертывании в webrole (это те же сага или разные)?

Некоторая справочная информация по последнему: webrole отличается от рабочей роли тем, что IIS настроен правильно, вот и все. Это также означает, что в webrole ваш код работает в 2-х местах, в процессе IIS и в процессе roleentrypoint. Таким образом, вы можете подтвердить, что вы фактически размещаете в роли roleentrypoint (пространство имен NServiceBus.Azure.Hosting, а не по умолчанию azure sdk one.)

Если вы уверены, что инициализация выполнена в нужном месте, вы может потребоваться проверить, есть ли ошибки в лазурных журналах?

Если это не дает более подробной информации, вы также можете включить intellitrace в своем решении и загрузить трассировки, чтобы увидеть, что происходит более подробно.

И в качестве последнего варианта вы также можете использовать windbg для экземпляра azure (RDP'd in) для отладки в реальном времени.

Надеюсь, что это поможет!

+0

Фактическая проблема была с MSDTC в connection_string Значение Data_Source ... и исправлено с добавлением enlist = false в строку подключения –

+0

Рад видеть, что это разрешено! –