NServiceBus中的并发句柄调用

时间:2011-03-01 07:37:48

标签: multithreading concurrency nservicebus

我希望我的IHandleMessages< X> .Handle(X x)方法由NSB同时调用。即使配置默认主机AsA_Client(关闭事务)并提供两个或多个线程(App.Config中的NumberOfWorkerThreads =“3”),当队列中有两条消息时,依次调用以下处理程序两次:

public void Handle(EventMessage message)
{
    Logger.Info(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.EventId));
    Logger.Info(string.Format("Message time: {0}.", message.Time));
    Logger.Info(string.Format("Message duration: {0}.", message.Duration));
    Thread.Sleep(10000);
}

这仅仅是NSB提供的PubSub演示的修改版本。无论我提供什么设置 - 我也试过调整IsolationLevel,但无济于事 - 这个处理程序会阻止并发调用。

在实践中,对于我们正在编写的一组特定处理程序来说,这是不可取的。期望的行为是 - 至少 - 让并发线程进入Handle方法,我们将通过软件锁手动调解对状态的访问。

这是不可能的还是我错过了一招?

1 个答案:

答案 0 :(得分:2)

最可能的原因是您正在使用NServiceBus的免费Express Edition,该版本仅限于一个线程。商用标准版允许您运行多个线程。

注意:NServiceBus现在可以在免费试用版中全速运行 - 不再需要进行性能限制。