我正在节点中创建worker_threads,并将它们收集到自定义WorkerPool。所有的工人都是独一无二的,因为他们有唯一的worker.threadId。我的应用程序能够终止特定的工作人员——我在 WorkerPool 中有 terminateById() 方法。
因此,如果您有一个 node.js 实例——一切都很好。但是,如果您尝试使用 docker-swarm 或 Kubernetes——您将拥有 n 个不同的 WorkerPool 实例。因此,例如,您在一个节点实例中创建了一些工作人员,现在您正试图终止一个 - 这意味着您有一些带有 threadId 的请求(或其他唯一数据来识别工作人员)。例如,您的负载均衡器选择为此请求使用另一个节点实例,在这种情况下您没有工作人员。
起初我想,我可以将 worker 的唯一索引更改为 userId+ThreadId 之类的东西,然后将其存储在 redis 中。但后来我没有找到任何关于 Worker.findByThreadID() 之类的信息。那么,当您有多个节点实例时,我该怎么办?
更新: 我在负载均衡器中找到了一些关于粘性会话的信息。这意味着,使用 cookie 我们可以将特定用户粘贴到特定节点实例,但在我的情况下,这种粘性必须处于活动状态,直到 worker 终止。它可以持续几天