我的系统使用命令模式和单独的处理程序。我的命令在CommandService上执行,CommandService当前处理所有正在进行的命令。
我有一些命令可以执行至少其中一项操作缓慢的操作:
我希望所有这些命令都在进程外处理,以便UI更加流畅。
我应该仅为这些命令使用消息传递总线,还是应该让进程内命令处理程序调用{{1}}?
系统拥有少量用户(忙碌的一天可能会有100个用户),因此队列可能永远不会很长。这里的主要内容是减少发送带有附加PDF(相关命令)的电子邮件时UI被阻止的时间。员工必须在一天内多次执行该命令。
考虑到整个情况,我认为我现在要使用BeginInvoke()
,原因如下:
但是知道我现在所知道的,在一个新系统上,我会从一开始就使用服务总线来执行任何慢速命令(几乎每个系统都需要发送电子邮件)并设计UI以便命令可以更容易地从同步切换到异步处理。在实现中,这基本上意味着每个POST都是AJAX,并在UI中执行操作,就像它成功一样。 (有关此示例,请查看Facebook如何处理评论。)
答案 0 :(得分:2)
这两种解决方案各有利弊。
我建议您估算系统负载要求,这些后台任务的数量,增长因素等,并依赖于此来做出决定。
但我个人认为,引入适合@ 80%案例的总线解决方案。您可以引入一个天真的总线实现,如果需要,可以在下一次迭代中进行扩展。
答案 1 :(得分:2)
这可能是一个可靠性问题,可以推动你走向消息总线。你看,如果你的原始事务(执行BeginInvoke的事务)成功,然后在你的调用中途服务器崩溃,你的系统将没有内存,它仍然需要发送电子邮件或生成PDF
消息总线可以将第二个事务回滚到队列,这样当服务器再次启动时,它将再次发送电子邮件。