Any Example of WebJob using EventHub?

笑着哭i 提交于 2019-12-13 06:40:58

问题


I've tried to come up with something from the example in the WebJobsSDK gitHub

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

But I'm afraid that's not far enough for someone of my limited "skillset"!

  • I can find no instance of JobHostConfiguration that has a UseEventHub property (using the v1.2.0-alpha-10291 version of the Microsoft.AzureWebJobs package), so I can't pass the EventHubConfiguration to the JobHost.

  • I've used EventHub before, not within the WebJob context. I don't see if the EventHostProcessor is still required if using the WebJob triggering...or does the WebJob trigger essentially act as the EventHostProcessor?

Anyway, if anyone has a more complete example for a simpleton like me that would be really sweet! Thanks


回答1:


From the documentation here, you should have all the information you need.

What you are missing is a reference of the Microsoft.Azure.WebJobs.ServiceBus.1.2.0-alpha-10291 nuget package.

The UseEventHub is an extension method that is declared in this package.

Otherwise your configuration seems ok. Here is an example on how to receive or send messages from/to an 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;
    }
}



回答2:


EventProcessorHost is still required, as the WebJob just provides the hosting environment for running it. As far as I know, EventProcessorHost is not integrated so deeply into WebJob, so its triggering mechanism cannot be used for processing EventHub messages. I use WebJob for running EventProcessorHost continuously:

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}");
}


来源:https://stackoverflow.com/questions/36727808/any-example-of-webjob-using-eventhub

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!