【发布时间】:2019-08-15 06:47:21
【问题描述】:
我有一个运行 QuartzNet 调度程序的 aspnetcore Mvc 网站。 调度程序有侦听器,当作业正在执行并已执行时会触发这些侦听器。侦听器使用 MediatR 发布消息,然后由名为 JobListenerEventsDispatcher 的类处理。
该类在构造函数中注入了 IServiceProvider 以获取 SignalR 集线器。
服务器端运行aspnetcore 2.2 QuartzScheduler 和 MediatR 都是最新版本。
Startup ConfigureServices 中的代码将 MediatR 服务添加到 ServiceCollection:
services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly);
QuartzNet JobListener 中发布 MediatR 消息的代码:
private async Task SendJobMessage(IJobExecutionContext model,CancellationToken cancellationToken)
{
try
{
await _service.Publish(new JobListenerEvent { JobContext = model }, cancellationToken);
}
catch (Exception)
{
// ignored
}
}
调度程序中的代码从 JobListener 接收消息:
public async Task Handle(JobListenerEvent notification, CancellationToken cancellationToken)
{
var context = _services.GetRequiredService<IHubContext<SchedulerHub>>();
await context.Clients.All.SendAsync("jobMessage", notification, cancellationToken);
}
到目前为止,它运行良好,Handle 方法正在向客户端发送消息。
JavaScript 代码添加 SignalR 并订阅来自中心的消息:
// SignalR actions
var connection = new signalR.HubConnectionBuilder()
.withUrl('/scheduler-hub')
.configureLogging(signalR.LogLevel.None)
.build();
connection.on('jobMessage', function (model) {
logToConsole("jobMessage", model);
loadCurrentExecutingJobs();
});
连接已建立,但 jobMessage 处理程序未收到服务器端的任何内容。
有其他人设法做到这一点吗?
【问题讨论】:
标签: quartz.net asp.net-core-signalr mediatr