gpt4 book ai didi

Azure worker 角色 + Ninject + Quartz

转载 作者:行者123 更新时间:2023-12-03 03:13:58 25 4
gpt4 key购买 nike

我正在基于现有的“核心”代码(意味着有一个 .Core 项目)构建一个我需要使用的后台进程。

核心代码基于Ninject。所以我使用Ninject.Extensions.Azure .

此外,我正在构建的核心是某种与调度有关的后台处理,为此我需要 Quartz。因此我安装了Ninject.Extensions.Quartz

现在我的问题是 Quartz 永远不会创建我的作业实例(无论无参数构造函数如何)。

查看创建的调度程序,它看起来不像从 Quart Extensions 返回的调度程序,但我找不到原因。

这是我的角色入口点:

public class WorkerRole : NinjectRoleEntryPoint
{
private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);

private IScheduler scheduler;
private IKernel kernel;
public override void Run()
{
Trace.TraceInformation("Company.Services.Report is running");

try
{
RunAsync(cancellationTokenSource.Token).Wait();
}
finally
{
runCompleteEvent.Set();
}

}

protected override bool OnRoleStarted()
{
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;

bool result = base.OnRoleStarted();

Trace.TraceInformation("Company.Services.Report has been started");
ConfigureScheduller();

return result;
}

protected override void OnRoleStopped()
{
Trace.TraceInformation("Company.Services.Report is stopping");

cancellationTokenSource.Cancel();
runCompleteEvent.WaitOne();

base.OnRoleStopped();

Trace.TraceInformation("Company.Services.Report has stopped");
}

protected override IKernel CreateKernel()
{
kernel = new StandardKernel();
kernel.Load(new CoreModule());
return kernel;
}

private static async Task RunAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
Trace.TraceInformation("Working");
await Task.Delay(1000, cancellationToken);
}
}
private void ConfigureScheduller()
{
scheduler = kernel.Get<IScheduler>();

// define the job and tie it to our WorkerJob class
IJobDetail job = JobBuilder.Create<ReportProcessorJob>().Build();

// Trigger the job to run now, and then repeat every 12 hours
ITrigger trigger = TriggerBuilder.Create()
.StartNow() //.WithCronSchedule("0 0 12 * * ?") //TODO: set good schedule start
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();

// Tell quartz to schedule the job using our trigger
scheduler.ScheduleJob(job, trigger);

scheduler.Start();
}

}

我没有包含该作业,因为它仅将信息跟踪到控制台以用于调试目的。

你发现里面有什么问题吗?

最佳答案

我发现问题了!

出现此问题的原因是 Ninject 找不到某些所需接口(interface)的实现。可悲的是它什么也没说,只是不起作用......

如果它对某人有帮助,我是这样发现的:

  1. 在 Visual Studio 中,转到“调试”->“异常”
  2. 检查公共(public)语言运行时异常的“抛出”

然后,当您调试时,它会向您显示实际的异常,并显示一条非常清晰的消息,表明它无法解析 IFoo。

HTH

关于Azure worker 角色 + Ninject + Quartz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com