我正在尝试减轻主服务器的负载。为此,我创建了一个微服务来处理消耗大量资源的打印任务,并尝试使用 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 门户的应用程序日志。
有什么想法吗?现在已经一个多星期了,我无法让它工作......
最佳答案
我过去在网络作业中调用 Console.Readline()
时有过非常糟糕的经历(这是从带有泵和网络作业的常规控制台的基本移动中遗留下来的)
理论上,由于 RunAndBlock()
,这个 Console.Readline()
并不是保持作业正常运行所必需的
关于azure - Azure WebJob 内的 EventHub 注册处理器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930536/