我有一个Web应用程序,用户可以将任务排入队列以导出一些数据。此过程最多可能需要2-3小时,但可以根据要求在几秒钟内完成。
导出过程将按如下方式处理:
predict()
holdout<-function(){
require("RMOA")
#Initialise streams
stream<-datastream_dataframe(iris)
test<-stream$get_points(n=30)
test<-datastream_dataframe(test)
#Specify model
mymodel<-HoeffdingTree(numericEstimator = "GaussianNumericAttributeClassObserver")
#Record execution time for training
start_time<-Sys.time()
while(!stream$finished)
{
mymodel <<- trainMOA(model=mymodel, formula = Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=stream)
}
end_time<-Sys.time()
time_taken <- end_time - start_time
cat("Finished training. Elapsed time: ", time_taken)
#Empty vector to store individual accuracy results of holdout stream elements
accuracies<-c()
#Record the execution time of holdout evaluation
start_time<-Sys.time()
while(!test$finished)
{
samp<-test$get_points(n=1)
pred <- predict(mymodel, samp, type="response")
}
end_time<-Sys.time()
time_taken <- end_time - start_time
cat("Finished training. Elapsed time: ", time_taken)
}
目前只调用外部流程中公开的自托管webapi方法,以便在那里开始工作。
这里的问题我想在工作完成时收到通知,如果他仍在浏览我们的网站(计划在这里使用 SignalR )通知用户它已准备就绪)。如果它没有托管在外部流程中,那将是显而易见的。
但是,当它在外部流程中托管时,获得通知的最佳方法是什么?在Web应用程序中公开Web方法,以便外部进程在完成后调用是一种正确的方法吗?
我们目前正计划使用Quartz.NET处理外部作业,但不介意尝试其他一些东西,比如Hangfire。
答案 0 :(得分:1)
很抱歉,我不清楚外部流程是由第三方系统拥有还是属于您的。
如果它是第三方,Web挂钩是一个很好的简单解决方案。您可以定义在外部流程完成时调用的端点。
否则我建议使用消息传递系统来传达这两种服务。只需向外部进程发送消息即可启动导出,并在作业完成时从外部进程发送另一条消息。这样,您可以确保在通知时一个服务停止运行,一旦服务再次启动,就会发送和处理该消息。