【问题标题】:Build Context (consumer client) specific spring application构建上下文(消费者客户端)特定的spring应用程序
【发布时间】:2017-10-18 12:05:05
【问题描述】:

我正在使用 grails 3.3.0 和 spring-boot 1.5.6.RELEASE 构建一个 spring-boot + grails 应用程序

我有控制器向消费者客户端应用程序提供 JSON 数据。

ExampleController.groovy

class ExampleCotnroller {

    def endpointServerJosn(){
    }
}

最近又引入了一个消费者,它期望类似的 JSON 数据来自不同的来源。

所以我在 application.yml another.client=true 中添加了一个标志,并将我的控制器修改为:

更新了 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 控制器来获取数据。

client 1 发送请求 -> master(我的控制器)拦截,调用一个 或更多与客户端相关的从属 API,获取数据并聚合它 并将数据发回

同样,客户端 2 发送请求 -> 主控(我的控制器) 拦截、调用与客户端2相关的一个或多个从属API

我正在考虑有一个抽象控制器,例如:

class AbstractApplicationController{

        def endpointServerJson();
}

class FirstCilentController extends AbstractApplicationController {
}

class SecondClientController extends AbstractApplicationController {
}

是否可以通过上述设计实现可扩展的解决方案?应用程序可以根据 external ymlapplication.yml 文件中的配置选择首选哪个控制器吗?

【问题讨论】:

    标签: spring grails spring-boot design-patterns


    【解决方案1】:

    在我看来,您描述的是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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多