Micro

时间:2017-12-03 19:32:00

标签: node.js http process microservices

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

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

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

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

选项:

  1. 在任何地方传递客户端ID
  2. 每个主机启动新进程
  3. 有没有更好的方法或我在假设中犯了错误?

    如果每个客户端进程的方法是更好的方法,我想知道是否有现有的解决方案来管理它?我看过http proxymicro cluster等,但似乎都没有提供解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

我找到了这个漂亮的工具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'))
}