2017-10-18 20 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); 
    } 

}