gpt4 book ai didi

.net - 在 ReBus 中处理消息期间立即执行回复

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

我正在使用一个 ASP.NET Web 项目,该项目提供一个带有按钮的 View ,这些按钮触发消息通过 MSMQ 发送到 Rebus。消息处理程序是长时间运行的操作(15-30 分钟),我希望 rebus 命令处理程序在处理消息期间将更新发送到网络。

public void Handle(ImportProducts message)
{
_bus.Send(new CommandStatusReply("Starting up import products job..."));
// One operation that takes about a minute
_bus.Send(new CommandStatusReply("Step one completed. processing..."));
// Another operation that takes a while
...
}

在我的 Web 应用程序中,我有一个 CommandStatusReply 处理程序,它将通过 SignalR 将状态消息推送到客户端。除了在处理 ImportProducts 消息时“批量”发送所有 CommandStatusReply 消息之外,一切正常。我希望立即发送它们。这可能吗?那么,我错过了什么?

我尝试过 Bus.Send()、Bus.Reply() 和 Bus.Publish(),还尝试将 Bus.Reply/Send 包装在 TransactionScope(TransactionScopeOptions.Suppress) 中,但无济于事。

最佳答案

可以使用另一条总线来报告进度,但您也需要使用另一条传输 - 否则,另一条总线将在接收到的同一 MSMQ 事务中登记其 MSMQ 发送操作当前正在处理的消息,并且在成功处理消息后,您仍然可以对所有队列操作进行相同的原子提交。

IMO 总线并不适合报告这样的进度 - 我更喜欢更轻量级的东西,例如信号R。

您可以轻松地从 Rebus 处理程序中使用 SignalR 来调用 SignalR 集线器,并让集线器向客户端发布进度 - 我自己已经这样做过几次了,它的工作原理就像一个魅力:)

关于.net - 在 ReBus 中处理消息期间立即执行回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674398/

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