首页 > 解决方案 > Azure WebJob 中的 EventHub 注册处理器不起作用

问题描述

我正在尝试减轻我的主服务器的负载。为此,我创建了一个微服务来处理消耗大量资源的打印任务,并尝试使用 Azure 事件中心集成两者。问题是,我似乎无法让网络作业正常工作。这是网络作业的代码:

public class Functions
{
    [NoAutomaticTrigger]
    public static async Task StartConsumerService()
    {
        Trace.WriteLine("Print - Inside StartConsumerService - Before GetEventProcessor");
        var eventProcessor = API.Integrations.Azure.EventHub.Client.GetEventProcessor(Constants.Azure.EventHub.Hubs.Print);
        Trace.WriteLine("Print - Inside StartConsumerService - Before RegisterEventProcessorAsync");
        await eventProcessor.RegisterEventProcessorAsync<PrintEventProcessor>();
        Trace.WriteLine("Print - Inside StartConsumerService - After RegisterEventProcessorAsync");

        Console.ReadLine();
    }
}

这是Program.cs

public class Program
{
    public static void Main()
    {
        Trace.WriteLine("Print - Inside Main");
        var config = new JobHostConfiguration();

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
        }


        Trace.WriteLine("Print - Inside Main - Before JobHost Initialization");
        var host = new JobHost(config);

        Trace.WriteLine("Print - Inside Main - Before Async Call");
        host.CallAsync(typeof(Functions).GetMethod("StartConsumerService"));
        Trace.WriteLine("Print - Inside Main - After Async Call");
        host.RunAndBlock();
        Trace.WriteLine("Print - Inside Main - After Run And Block");
    }
}

WebJob 正在运行并且该函数已被调用。我在 Azure 门户上检查过:

在此处输入图像描述

这就是我从我的网络应用程序触发客户端的方式:

var client = EventHubClient.CreateFromConnectionString(cs);

await client.SendAsync(new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message))));
await client.CloseAsync();

尽管如此,它永远不会被运行在 webjob 上的事件处理器消耗掉。此外,无论是来自 SCM 的 webjob 日志,还是来自 Azure WebApp 门户的应用程序日志,我的任何跟踪都没有出现在日志中。

有任何想法吗?现在已经一个多星期了,我无法让它工作......

标签: azureazure-webjobsazure-eventhub

解决方案


我过去在网络作业中的通话经历非常糟糕Console.Readline()(是从带有泵和网络作业的常规控制台的基本移动遗留下来的)

从理论上讲,这Console.Readline()对于保持工作正常运行并不是必需的,这要归功于RunAndBlock()


推荐阅读