2016-01-20 28 views
0

背景:我們都看到了幾種配置分佈式應用程序的方式。出於我的目的,其中兩個脫穎而出:尋找配置DSL,允許稀疏規範和輸出JSON

  1. 有一個海量數據庫,所有節點都有權訪問。每個節點都知道自己的身份,因此可以對所述數據庫執行查詢以提取特定於自身的配置信息。

  2. 使用定製的(即特定於每個節點的)配置文件(例如JSON),使得節點根本不必接觸數據庫。他們只是讀取定製的配置文件,並做它說的。

每個人都有優點和缺點。對於我的目的,我想探索#2a更進一步,但我遇到的問題是,JSON文件可以變得相當大。我想知道是否有人知道非常適合生成這些JSON文件的DSL。

步驟一步的例子來說明我的意思:

想我做出了這個元語言,看起來像這樣:

bike.%[0..3](Vehicle) 

這則輸出以下JSON:

{ 
    "bike.0": 
    { 
     "type": "Vehicle" 
    }, 

    "bike.1": 
    { 
     "type": "Vehicle" 
    }, 

    "bike.2": 
    { 
     "type": "Vehicle" 
    }, 

    "bike.3": 
    { 
     "type": "Vehicle" 
    } 
} 

這個想法是,我們剛剛創造了4輛自行車,每輛車都是Vehicle型。

進一步說:

bike[i=0..3](Vehicle) 
    label: "hello %i" 
    label.3: "last" 

現在這樣做是命名索引變量「我」,使其可用於每個項目的配置信息。這將是輸出的JSON會是這樣的:

{ 
    "bike.0": 
    { 
     "type": "Vehicle", 
     "cfg": 
     { 
      "label": "hello 0" 
     } 
    }, 

    "bike.1": 
    { 
     "type": "Vehicle", 
     "cfg": 
     { 
      "label": "hello 1" 
     } 
    }, 

    "bike.2": 
    { 
     "type": "Vehicle", 
     "cfg": 
     { 
      "label": "hello.2" 
     } 
    }, 

    "bike.3": 
    { 
     "type": "Vehicle", 
     "cfg": 
     { 
      "label": "last" 
     } 
    } 
} 

你可以看到的最後一個標籤是如何被覆蓋,所以這是一個辦法稀疏指定的東西。有沒有什麼東西可以讓人做到這一點?

謝謝!

回答

1

,而不是作爲元語言單片實體的思維,它可能是更好的把它分成三個部分:

  1. 輸入規範。您可以使用配置文件語法來保存此規範。

  2. 可以使用print語句和for-loops生成運行時配置文件的庫或實用程序。 Apache Velocity模板引擎讓人想起它適合於這個目的。我建議你看看它的user guide以瞭解它可以做什麼。

  3. 一些粘合代碼將上述兩個項目連接在一起。特別是,膠合代碼從輸入規範中讀取name = value對,並將它們傳遞給模板引擎,模板引擎使用它作爲參數來「實例化」要生成的配置文件的模板版本。

My answer to another StackOverflow question提供了上述想法的一些更多細節。