我在使用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,并且我正在回复所有正确指定的字段的消息...
我会非常感谢任何想法,谢谢。
答案 0 :(得分:0)
这将是一个有趣的问题。我没有看到任何明显的错误。
所以症状是,它在本地工作(具有完全相同的配置?)并且它在部署在webrole中时起作用(这些是相同的传奇还是不同的?)。
关于后者的一些背景信息:webrole与工作者角色的不同之处在于IIS已正确配置,就是这样。这也意味着在webrole中,您的代码在IIS进程和roleentrypoint进程中的两个位置运行。因此,您可能希望验证您实际上是在roleentrypoint(命名空间NServiceBus.Azure.Hosting,而不是默认的azure sdk)中进行托管。)
如果您确定初始化是在正确的位置完成的,您可能想检查天蓝色日志中是否有任何错误?
如果没有提供更多详细信息,您还可以在解决方案中启用intellitrace并下载跟踪以查看更详细的内容。
作为最后一个选项,您还可以在azure实例(RDP中)上使用windbg进行实时调试。
希望以上任何一种帮助!