Процессор регистрации EventHub внутри Azure WebJob не работает

Я пытаюсь снять нагрузку с моего основного сервера. Для этого я создал микрослужбу для выполнения моей задачи печати, которая потребляла много ресурсов, и пытался интегрировать их с помощью концентраторов событий Azure. Проблема в том, что я не могу заставить работать webjob. Это код веб-задания:

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();

Тем не менее, он никогда не используется обработчиком событий, работающим в веб-задании. Кроме того, ни одна из моих трассировок не отображается в журнале, ни в журнале веб-заданий из SCM, ни в журналах приложений на портале Azure WebApp.

Любые идеи? Прошло уже больше недели, а я не могу заставить это работать...


person eestein    schedule 20.08.2018    source источник


Ответы (1)


В прошлом у меня был довольно плохой опыт Console.Readline() звонка в веб-задании (был пережиток базового перехода с обычной консоли с помпой и веб-заданием)

Теоретически это Console.Readline() не нужно для поддержания работы благодаря RunAndBlock()

person camous    schedule 22.09.2018
comment
Спасибо, но это не относится к моей проблеме. Даже если я его удалю, он не вызывается. Просто чтобы немного больше рассказать об этом, этот console.readline был всего лишь тестом после того, как обычный способ не работал. - person eestein; 23.09.2018