2016-04-19 10 views
0

Я пытался придумать что-то из примера в WebJobsSDK GitHubЛюбой пример WebJob с использованием EventHub?

var eventHubConfig = new EventHubConfiguration(); 
string eventHubName = "MyHubName"; 
eventHubConfig.AddSender(eventHubName,"Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=SendRule;SharedAccessKey=xxxxxxxx"); 
eventHubConfig.AddReceiver(eventHubName, "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=ReceiveRule;SharedAccessKey=yyyyyyy"); 

config.UseEventHub(eventHubConfig); 
JobHost host = new JobHost(config); 

Но я боюсь, что это не достаточно далеко для кого-то из моих ограниченных «» навыков!

  • Я не могу найти ни одного примера JobHostConfiguration, который имеет свойство UseEventHub (используя версию пакета Microsoft.AzureWebJobs v1.2.0-альфа-10291), поэтому я не могу передать EventHubConfiguration в JobHost.

  • Я использовал EventHub раньше, а не в контексте WebJob. Я не вижу, требуется ли EventHostProcessor, если вы используете запуск WebJob ... или запускает ли запуск WebJob как EventHostProcessor?

В любом случае, если у кого-то есть более полный пример для простака, подобного мне, это было бы действительно мило! Спасибо

ответ

2

Из документации here, вы должны иметь всю необходимую Вам информацию.

Что вам не хватает, это ссылка на пакет nuget Microsoft.Azure.WebJobs.ServiceBus.1.2.0-alpha-10291.

UseEventHub - это метод расширения, объявленный в этом пакете.

В противном случае ваша конфигурация выглядит нормально. Вот пример того, как получить или отправлять сообщения от/до EventHub:

public class BasicTest 
{ 
    public class Payload 
    { 
     public int Counter { get; set; } 
    } 
    public static void SendEvents([EventHub("MyHubName")] out Payload x) 
    { 
     x = new Payload { Counter = 100 }; 
    } 

    public static void Trigger(
     [EventHubTrigger("MyHubName")] Payload x, 
     [EventHub("MyHubName")] out Payload y) 
    { 
     x.Counter++; 
     y = x; 
    } 
} 
+0

Спасибо Томас, я использовал этот пакет nuget и после этого довольно «легкий» пример. Я не видел метод расширения, поэтому, как только я добавил «using Microsoft.Azure.WebJobs.ServiceBus», я мог бы, по крайней мере, получить его для компиляции. Я все еще нахожусь в пути от всего, что работает на самом деле. Как я уже говорил, этот пример немного упрощен для моих навыков. – WirelessG

+0

@WirelessG, не стесняйтесь редактировать свой вопрос или задавать новый вопрос, если вам нужна более подробная информация о внедрении решения. – Thomas

1

EventProcessorHost по-прежнему требуется, так как WebJob предоставляет только среду хостинга для ее запуска. Насколько я знаю, EventProcessorHost не так глубоко интегрирован в WebJob, поэтому его механизм запуска не может использоваться для обработки сообщений EventHub. Я использую WebJob для запуска EventProcessorHost непрерывно:

public static void Main() 
{ 
    RunAsync().Wait(); 
} 

private static async Task RunAsync() 
{ 
    try 
    { 
     using (var shutdownWatcher = new WebJobsShutdownWatcher()) 
     { 
      await Console.Out.WriteLineAsync("Initializing..."); 

      var eventProcessorHostName = "eventProcessorHostName"; 
      var eventHubName = ConfigurationManager.AppSettings["eventHubName"]; 
      var consumerGroupName = ConfigurationManager.AppSettings["eventHubConsumerGroupName"]; 
      var eventHubConnectionString = ConfigurationManager.ConnectionStrings["EventHub"].ConnectionString; 
      var storageConnectionString = ConfigurationManager.ConnectionStrings["EventHubStorage"].ConnectionString; 

      var eventProcessorHost = new EventProcessorHost(eventProcessorHostName, eventHubName, consumerGroupName, eventHubConnectionString, storageConnectionString); 

      await Console.Out.WriteLineAsync("Registering event processors..."); 

      var processorOptions = new EventProcessorOptions(); 

      processorOptions.ExceptionReceived += ProcessorOptions_ExceptionReceived; 

      await eventProcessorHost.RegisterEventProcessorAsync<CustomEventProcessor>(processorOptions); 

      await Console.Out.WriteLineAsync("Processing..."); 

      await Task.Delay(Timeout.Infinite, shutdownWatcher.Token); 

      await Console.Out.WriteLineAsync("Unregistering event processors..."); 

      await eventProcessorHost.UnregisterEventProcessorAsync(); 

      await Console.Out.WriteLineAsync("Finished."); 
     } 
     catch (Exception ex) 
     { 
      await HandleErrorAsync(ex); 
     } 
    } 
} 

private static async void ProcessorOptions_ExceptionReceived(object sender, ExceptionReceivedEventArgs e) 
{ 
    await HandleErrorAsync(e.Exception); 
} 

private static async Task HandleErrorAsync(Exception ex) 
{ 
    await Console.Error.WriteLineAsync($"Critical error occured: {ex.Message}{ex.StackTrace}"); 
} 
+0

Благодаря Аттила, я сделал это тот путь, прежде чем, но я думаю, что в новом пре-релиз лазури-webjobs- Предполагается, что sdk будет более глубоко интегрирован. Использование механизма Trigger аналогично webjobs с ServiceBus ... Я просто не могу понять это из вики. https://github.com/Azure/azure-webjobs-sdk/wiki/EventHub-support – WirelessG

+0

Недавно я столкнулся с такой проблемой хостинга, но я только что нашел [Azure WebJobs SDK Extensions] (https://github.com/Azure/azure-webjobs-sdk-extensions), который вообще не имеет отношения к EventHub. Моя основная забота о поддержке [WebJob SDK EventHub] (https://github.com/Azure/azure-webjobs-sdk/wiki/EventHub-Support) - это автоматическая контрольная точка после обработки сообщений: а) в сценариях с высокой пропускной способностью ухудшить производительность; b) как повторить обработку сообщений после сбоя временной обработки (например: постоянное хранилище недоступно). –

+0

Новый атрибут [EventHubTrigger] (в расширении служебной шины) будет обрабатывать прослушивание. Он создаст EventProcessHost. Для проверки маршрута вы можете получить пакет событий (https://github.com/Azure/azure-webjobs-sdk/wiki/EventHub-Support), и контрольная точка вызывается один раз для всей партии. –