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

标签 .net rebus

我正在使用一个 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/

相关文章:

.net - 向 ADO .NET Entity Framework 添加业务层

画画传奇 : Message is not arrived in correct sequence when subscriber(s) sent to publisher

c# - 调用所有处理程序后如何提交 UoW

c# - SqlConnection 并避免升级到 MSDTC

rebus - 使用 Azure 服务总线处理 Rebus 中的发布/订阅

.net - Webservice 在整数字段中发送 null

c# - 此代码中是否需要 MemoryBarrier?

c# - SandcaSTLe 错误 BE0073 .NET Framework 4.5

c# - 如何在 OpenXML SDK 中拆分文档

c# - ReBus 相当于 NServiceBus Saga ReplyToOriginator