NServiceBus saga没有处理azure上的消息

时间:2013-08-27 15:03:42

标签: azure nservicebus saga azure-storage-queues nservicebus4

我在使用azure云服务部署的NServiceBus sagas时遇到了奇怪的行为。他们永远不会得到回复的消息,永远不会醒来......虽然如果它在本地部署一切正常,当saA在WebApi云服务角色时,sagas也能正常工作...

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>

这是我用于坚持的配置

NServiceBus.Hosting.Azure,NServiceBus.NHibernate,NServiceBus.Core,NServiceBus.Azure,NServiceBus全部为v4.0.30319

我正在使用AzureStorageQueue,而且我确信我已使用正确的ConfigureMapping覆盖了ConfigureHowToFindSaga,并且我正在回复所有正确指定的字段的消息...

我会非常感谢任何想法,谢谢。

1 个答案:

答案 0 :(得分:0)

这将是一个有趣的问题。我没有看到任何明显的错误。

所以症状是,它在本地工作(具有完全相同的配置?)并且它在部署在webrole中时起作用(这些是相同的传奇还是不同的?)。

关于后者的一些背景信息:webrole与工作者角色的不同之处在于IIS已正确配置,就是这样。这也意味着在webrole中,您的代码在IIS进程和roleentrypoint进程中的两个位置运行。因此,您可能希望验证您实际上是在roleentrypoint(命名空间NServiceBus.Azure.Hosting,而不是默认的azure sdk)中进行托管。)

如果您确定初始化是在正确的位置完成的,您可能想检查天蓝色日志中是否有任何错误?

如果没有提供更多详细信息,您还可以在解决方案中启用intellitrace并下载跟踪以查看更详细的内容。

作为最后一个选项,您还可以在azure实例(RDP中)上使用windbg进行实时调试。

希望以上任何一种帮助!