部署到 Azure 时未调用 MessageHandlers

MessageHandlers not invoked when deployed to Azure

我有一个使用 Rebus 库通过 Azure ServiceBus 接收消息的应用程序。

当应用程序 运行 在 Azure 上作为 Web 应用程序时,与我 运行 在本地时相比,我观察到不同的行为。

当它 运行 在 Azure 中时,我的消息处理程序没有被调用。 当应用程序 运行 在本地时,一切都按预期工作。

这是我的设置。

在我的 web 项目 Portal 中,Global.asax.cs:

    protected void Application_Start()
    {
        _webContainer = new WindsorContainer();
        _queueContainer = new WindsorContainer();
        ConfigureWebContainer();
        _queueContainer.Install(FromAssembly.Containing<ServiceBusInstaller>());

        ApplicationInsightsConfig.Configure();
    }

在ServiceBus项目中(ServiceBusInstaller所在)

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    var adapter = new CastleWindsorContainerAdapter(container);
    var connectionString = CloudConfigurationManager.GetSetting("QueueUrl");

    var configurer = Configure
    .With(adapter)
    .Options(o =>
    {
        o.SimpleRetryStrategy(maxDeliveryAttempts: 0);
    })
    .Logging(l => l.Log4Net())
    .Routing(r => r.TypeBased()
        .MapAssemblyOf<ResetPasswordMessage>("Email"))
    Transport(t => t.UseAzureServiceBus(connectionString, "Email"));
    // Create and starts the bus
    configurer.Start();
}

我的 ResetPasswordHandler 如下所示:

public class ResetPasswordHandler : IHandleMessages<ResetPasswordMessage>
{
    private readonly IContactAndEmailService _contactAndEmailService;

    public ResetPasswordHandler(IContactAndEmailService contactAndEmailService)
    {
        _contactAndEmailService = contactAndEmailService;
    }

    public async Task Handle(ResetPasswordMessage message)
    {
        _contactAndEmailService.SendEmail(message);
    }
}

我正在使用服务总线资源管理器连接到服务总线,我可以看到消息在 "email" 队列中。但是它确实留在那里,因此不会被消耗。

非常感谢任何指向设置或 azure 订阅限制或其他可以帮助我前进的指示。

我认为这可能与队列名称的大小写有关,Email

你能试着把它改成小写吗?