如何获取nservicebus的工作线程列表

时间:2012-10-01 12:17:08

标签: nservicebus

如何获取nservicebus的工作线程列表。我需要将workerThread id注册到db,然后将某些类型的消息绑定到确切的workerthread。真正的想法是处理毒药消息。想要阻止所有线程不处理除指定消息之外的有害消息。将有一个单独的服务,将通过数据库管理线程。

1 个答案:

答案 0 :(得分:1)

我不会尝试这样做。几乎肯定会遇到问题。

当然,为了获得每个线程的某种“身份”,你可以在你的消息处理程序中放置这样的东西:

[ThreadStatic]
private static readonly Guid ThreadId = Guid.NewGuid();

但是,我不会这样做!每次重新启动端点时,guid都会改变。

您还可以直接从.NET查询线程列表,并尝试确定哪些是消息处理线程,但这听起来很可怕,我甚至不想进入它。

真正的问题:毒药消息处理

正如你的评论所述,真正的问题是毒药信息真的是毒药。它不仅失败了,而且它需要很长时间才能完全搞砸所有其他线程!

由于您能够根据消息的某些属性识别这些消息,因此我会在超时的操作之前检测并抛出异常。一直以来。

如果您希望能够定期测试以查看问题是否已修复,您可以选择以下几种方法:

  1. 通过其他方式进行测试,并在修复后将消息返回到源队列。
  2. 添加appSetting,以便在启用配置设置时跳过快速投掷行为。然后定期您可以编辑配置,重新启动端点,查看它是否已修复,如果不是,则将其切换回来。
  3. 创建另一个保持线程锁定增量值为零的消息处理程序。发送一条控制信息说“嘿,现在试一下”。然后你的快速投掷行为可以减少该值并允许一个人看看会发生什么。这当然也很危险。确保您的锁定很紧,因为您现在正在不同的消息处理线程之间共享此状态。