0

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

4

1 回答 1

1

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

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

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

但同样,我不会那样做!每次重新启动端点时,向导都会改变,例如。

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

真正的问题:毒消息处理

正如您的评论所述,真正的问题是有毒信息确实是有毒的。它不仅失败了,而且这样做需要很长时间,以至于它真的把所有其他线程都搞砸了!

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

如果您希望能够定期测试以查看问题是否已解决,您有几个选择:

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