【问题标题】:Unique configuration per vhost for MicroMicro 的每个 vhost 的唯一配置
【发布时间】:2018-05-17 06:30:07
【问题描述】:

我有一些 Zeit micro 服务。此设置是用于多个前端/域/客户端的 RESTful API

我需要在遍布应用程序的配置中区分这些客户端。我可以在我的处理程序中设置一个process.env.CLIENT_ID,例如,我可以在我的配置处理程序中使用它来知道要加载哪个配置。然而,这意味着为每个请求域启动一个新的 http/micro 进程(或我使用的任何方法 - 诸如客户端 ID 之类的信息可能会出现在标头中),以便在整个请求中维护 process.env.CLIENT_ID 而不会被覆盖来自另一个客户端的另一个同时请求。

所以我必须让每个微服务检查客户端 ID,确定它是否已经为该客户端启动了一个进程,然后使用该进程启动一个新进程。

这看起来很乱,但不确定如何处理。通过代码调用传递客户端 ID(即 getConfg(client, key) 在我的情况下不实用,我想避免这种情况。

选项:

  1. 到处传递客户 ID
  2. 为每个主机启动新进程
  3. ?

有没有更好的方法,还是我的假设有误?

如果每个客户的流程方法是更好的方法,我想知道是否有现有的解决方案来管理这个?我查看了http proxymicro cluster 等,但似乎没有一个可以解决这个问题。

【问题讨论】:

    标签: node.js http process microservices


    【解决方案1】:

    我发现了这个不错的工具https://github.com/othiym23/node-continuation-local-storage

    // Micro handler
    const { createNamespace } = require('continuation-local-storage')
    let namespace = createNamespace('foo')
    
    const handler = async (req, res) => {
      const clientId = // some header thing or host
    
    
     namespace.run(function() {
      namespace.set('clientId', clientId)
        someCode()
      })
    })
    
    
    // Some other file
    const { getNamespace } = require('continuation-local-storage')
    
    const someCode = () => {
      const namespace = getNamespace('foo')
      console.log(namespace.get('clientId'))
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      相关资源
      最近更新 更多