Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 服务到进程排队的长期运行进程-从何处开始?_.net_Windows Services_Queue_Batch Processing - Fatal编程技术网

.net 服务到进程排队的长期运行进程-从何处开始?

.net 服务到进程排队的长期运行进程-从何处开始?,.net,windows-services,queue,batch-processing,.net,Windows Services,Queue,Batch Processing,构建服务以处理排队的长期运行进程的最佳方法是什么?例如,这就是我们要做的 用户将401k数据上传到web 数据进入处理队列(数据库表) 401k已处理(每个客户端可能需要几分钟) 通过电子邮件通知用户401k已被接受 我们当然可以编写一个服务来处理这个问题,但是如果服务失败怎么办?如何通知某人?如果有例外怎么办?此外,该服务是否应处理其他非用户启动的流程(如发送电子邮件等) 我们有一个由熟练的.NET开发人员组成的团队,但我们所有的经验都是在任务调度器启动的web/客户端应用程序或控制台应用程序

构建服务以处理排队的长期运行进程的最佳方法是什么?例如,这就是我们要做的

  • 用户将401k数据上传到web
  • 数据进入处理队列(数据库表)
  • 401k已处理(每个客户端可能需要几分钟)
  • 通过电子邮件通知用户401k已被接受
  • 我们当然可以编写一个服务来处理这个问题,但是如果服务失败怎么办?如何通知某人?如果有例外怎么办?此外,该服务是否应处理其他非用户启动的流程(如发送电子邮件等)

    我们有一个由熟练的.NET开发人员组成的团队,但我们所有的经验都是在任务调度器启动的web/客户端应用程序或控制台应用程序方面,因此,如果您能提供任何指导,我们将不胜感激。

    请考虑使用MSMQ()完成此任务。也许是这样的一种流动:

    • 用户将数据上传到网站
    • 将数据写入MSMQ
    • 在间隔n处,Windows服务从队列中窥视/读取下一条等待的消息
    • 该工作由服务完成,数据被写入数据库,并向另一个队列发送另一条消息以通知客户
    • 另一个服务从第二个队列中窥视/读取。根据需要向客户发送电子邮件/通知。建议需要第二个队列来处理SMTP中断等,并且可以独立于第一个队列进行管理
    您对潜在故障的另一个担忧可能是另一项服务,或者您网站中的轮询机制。读取数据库中上次处理的消息的日期时间。读取“正在等待”的项目数。如果数字不令人满意,根据需要向管理员/客户/等发送电子邮件

    使用MSMQ意味着您可以使用拉式系统,并且不必通过对数据库每隔n次轮询来加重数据库和网络的负担。发送的消息都是事务性的,因此您根本不必担心丢失/未确认的消息

    @Jess:我知道你在试图掩护基地。一个合适的队列会有所帮助,因为它不会用请求重击数据库。应用程序/项目/客户的规模将决定这是否是一个问题。事实上,您可以在Page_Load中将这些都放到一个.aspx中,但您肯定知道得更清楚

    回复:过度杀戮。我“理解”了这个问题,即有人担心停机时间以及这样的应用程序如何处理这一问题。现成的web服务不会:

    • 很好地处理数据库中断,因为它依赖于数据库来保存其工作的输出。“捕手”、“工人”和“结果者”一炮而过。这真的属于非军事区吗?注1:“网络”,而不是内联网

    • 在不添加更多web+工作节点的情况下进行扩展

    建议的解决方案包括:

    • MSMQ有自己的存储实现,因此它不依赖于应用程序数据库来排队和发送顺序。它是Windows的一部分,作为服务运行。如果MSMQ已关闭,则Windows已关闭,或者安全配置不正确

    • 异步处理。您的web层可以简单地“捕获”请求并“放入”队列。就这样。无需旋转线程,无需依赖应用程序数据库。它可以返回到接收其他用户请求的工作。用户不必“感觉”繁忙工作日的滞后

    • 可伸缩性。您可以将Windows服务部署到1台以上的计算机上才能工作

    • 工作分离:401k处理、电子邮件发送、请求处理+身份验证都在不同的模块中

    • 安全性—不清楚这是在内部网还是在internet解决方案中实现的。如果Internet被暴露,那么考虑如何将消息从DMZ发送到内部应用程序。您能证明从开放的internet对应用程序数据库进行读写访问是合理的吗?考虑一下某个门面。队列提供了这一点

    考虑将MSMQ()用于此任务。也许是这样的一种流动:

    • 用户将数据上传到网站
    • 将数据写入MSMQ
    • 在间隔n处,Windows服务从队列中窥视/读取下一条等待的消息
    • 该工作由服务完成,数据被写入数据库,并向另一个队列发送另一条消息以通知客户
    • 另一个服务从第二个队列中窥视/读取。根据需要向客户发送电子邮件/通知。建议需要第二个队列来处理SMTP中断等,并且可以独立于第一个队列进行管理
    您对潜在故障的另一个担忧可能是另一项服务,或者您网站中的轮询机制。读取数据库中上次处理的消息的日期时间。读取“正在等待”的项目数。如果数字不令人满意,根据需要向管理员/客户/等发送电子邮件

    使用MSMQ意味着您可以使用拉式系统,并且不必通过对数据库每隔n次轮询来加重数据库和网络的负担。发送的消息都是事务性的,因此您根本不必担心丢失/未确认的消息

    @Jess:我知道你在试图掩护基地。一个合适的队列会有所帮助,因为它不会用请求重击数据库。应用程序/项目/客户的规模将决定这是否是一个问题。事实上,您可以在Page_Load中将这些都放到一个.aspx中,但您肯定知道得更清楚

    回复:过度杀戮。我“理解”了这个问题,即有人担心停机时间以及这样的应用程序如何处理这一问题。现成的web服务不会:

    • 很好地处理数据库中断,因为它依赖于数据库来保存其工作的输出。“捕手”、“工人”和“结果者”一炮而过。这真的属于非军事区吗?附注一