NServiceBus经销商能否报告工人的进展?

时间:2011-01-25 15:37:27

标签: nservicebus nservicebus-distributor

我正在调查NServiceBus,我不确定如何(或者甚至)我可以用它来处理这种情况:

我有多个客户发送工作请求,经销商将这些工作请求发送给工人。这项工作需要很长时间才能完成,我希望工作人员将进度报告给发送原始请求的客户。

我查看了全双工样本以及how to add the distributor to that sample。我有这些工作,但当我修改它们以回复一系列进度消息(消息之间有延迟,根据下面显示的代码),客户端同时收到所有进度消息。

public class RequestDataMessageHandler : IHandleMessages<RequestDataMessage>
{
    public IBus Bus { get; set; }

    public void Handle(RequestDataMessage message)
    {
        for (var i = 0; i < 10; i++)
        {
            var count = i;
            var response = this.Bus.CreateInstance<DataResponseMessage>(m =>
                {
                    m.DataId = message.DataId;
                    m.Progress = count * 10;
                });

            this.Bus.Reply(response);

            Thread.Sleep(1000);
        }
    }
}

我怀疑我对NServiceBus的工作原理并不了解。有人可以解释我哪里出错了,或者给我一些例子和/或文件?

2 个答案:

答案 0 :(得分:2)

您构建的内容将始终作为同一事务的一部分发送消息。由于每个处理程序有一个事务,因此您无法以这种方式传达进度。您必须为每个处理通信进度的处理块提供单独的端点。我们通过更新事务中未涉及的内容来实现通信进度。这可以通过向另一个端点发送非事务性消息来更新进度或类似RPC调用之类的操作来完成。从那里你可以得到一些进展数据存储的民意调查。

答案 1 :(得分:1)

让您的员工使用bus.Reply()将消息发送回您的客户端。回复将自动将消息发送到发送原始消息的端点