2017-10-18 43 views
0

我建立使用Grails 3.3.0和彈簧引導+ Grails應用程序春天啓動1.5.6.RELEASE構建上下文(消費者客戶端)特定彈性應用

我有控制器服務JSON數據消費者客戶端應用程序。

ExampleController.groovy

class ExampleCotnroller { 

    def endpointServerJosn(){ 
    } 
} 

最近引入一個更多的消費者,並預計類似的JSON數據,但來自不同的來源。

所以我加了一個標誌,我application.yml another.client =真和修改我的控制器:

更新ExampleController.groovy

class ExampleCotnroller { 

    def endpointServerJosn(){ 
     if(another.client){ 
      //server data from this client's source 
     }else{ 
      //server data from other client's source 
     } 
    } 
} 

但我期待更多的設置的客戶和這將弄亂我的控制器,因爲我沒有找到我的解決方案可擴展的設計。這裏每個客戶端都有自己的從屬API控制器來獲取數據。

客戶機1發送請求 - >主(我的控制器)攔截,調用相關的客戶端一個 礦石多個從屬的API,取出數據並聚集它 併發送回數據

simiallarly,客戶機2發送請求 - >主(我的控制器) 攔截,調用一個或相關客戶端以上從屬的API 2

我想具有抽象控制器等:

class AbstractApplicationController{ 

     def endpointServerJson(); 
} 

class FirstCilentController extends AbstractApplicationController { 
} 

class SecondClientController extends AbstractApplicationController { 
} 

以上設計是否可以實現可擴展的解決方案?應用程序可以根據外部ymlapplication.yml文件中的配置選擇要使用哪個控制器?

回答

0

在我看來,您正在描述Multitenancy的問題。維基百科:

術語「軟件多租戶」指的是軟件架構,其中的軟件在服務器上運行,並一個單個實例爲多個 [...] 用戶誰分享對軟件實例具有特定權限的通用訪問。

來源:https://en.wikipedia.org/wiki/Multitenancy

我勸你開始執行任何代碼之前,在長度研究多租戶的概念。有很多資源在那裏,但這個鏈接是一個偉大的介紹:

https://fizzylogic.nl/2016/01/24/make-your-spring-boot-application-multi-tenant-aware-in-2-steps/

最後,如果你確實是在可怕的時間限制。在我看來,您應該在您的控制器下創建一個客戶端不可知的數據訪問層或一組服務,該服務提供了檢索數據和接受客戶端標識符作爲參數的方法。例如:

class ExampleCotnroller { 

    def endpointServerJosn() { 
     return clientDataService.getData(clientID); 
    } 

}