2017-12-03 6 views
0

私はいくつかのZeit microサービスを持っています。このセットアップは複数のフロントエンド/ドメイン/クライアントのためのRESTfulなAPIですマイクロの仮想ホストごとのユニークな設定

私の設定では、アプリ全体に広がっているこれらのクライアントを区別する必要があります。私のハンドラでは、process.env.CLIENT_IDを設定することができます。たとえば、設定ハンドラでロードする設定を知ることができます。しかし、これは、要求全体を通してprocess.env.CLIENT_IDを維持し、別のドメインによって上書きされないように、各要求ドメイン(または、私が使用するどのような方法でも、クライアントIDなどの情報はヘッダに入ってくる)に関する新しいhttp/microプロセスを起動することを意味します別のクライアントからの同時要求。

私は各マイクロサービスにクライアントIDをチェックさせ、既にそのクライアント用のプロセスを起動しているかどうかを判断し、新しいものを起動する必要があります。

これは面倒ですが、他にどのように処理するかわかりません。コードの呼び出しの周りクライアントIDを渡す(すなわちgetConfg(client, key)は、私の状況では実用的ではないと私はそれを避けたい

オプション:周りのどこにでも

  1. パスクライアントID
  2. 起動し、新しいプロセスホストごと

は、より良い方法はありますか私は私の仮定でミスをしたか?

クライアントごとのアプローチの方が良い方法であれば、これを管理する既存のソリューションがあるのだろうかと思いますか? Iveはhttp proxymicro clusterなどを見ましたが、どれもこの問題の解決策を提供していないようです。

答えて

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')) 
} 
この便利なツールを見つけました
関連する問題