从单个微服务调用多个主类的更好的设计方法

时间:2019-02-05 17:09:04

标签: java spring spring-boot design-patterns microservices

我们在公司中使用微服务(MS)架构。有一个数据库MS将JSON封装在Response类中,然后将其发送到另一个MS OutputFormatter,该MS格式化JSON以根据业务类型以不同方式发送(到目前为止,有2种,但是它在Response类的一个字段中定义。该MS将具有格式化响应的同一个类的新对象返回给DB MS,​​MS最终将其持久保存在DB中。 现在,我创建了:

  • 每种业务类型分别有2个MainMain1Main2
  • 一个具有OutputServiceBus1OutputService每种业务类型的实现者的接口Bus1OutputService
  • 通过主类链接的单独YML配置文件。我在不同的端口上运行两个类。
  • 一个控制器说RequestController,其端点要从DB MS触发,并且它接收Response对象作为RequestBody参数

我的问题仅涉及控制器。我使用了如下的自动装配:

@RestController
public class RequestController {

    @Autowired
    @Qualifier("Bus1OutputService")
    OutputService oService1;

    @Autowired
    @Qualifier("Bus2OutputService")
    OutputService oService2;

    @PostMapping("/generateOutput")
    public Response generateOutput(@RequestBody Response requestJSON) {
        String bType = requestJSON.getMetadata().get("BUSINESS_TYPE");

        Response formattedOResponse = null;
        switch (bType){
            case "Bus1":
                formattedOResponse = oService1.generateOutputJSON(requestJSON);
                break;
            case "Bus2":
                formattedOResponse = oService2.generateOutputJSON(requestJSON);
                break;
        }
        return formattedOResponse;
    }
}

如果我同时运行两个主类,则将启动2个spring boot应用程序。所有业务逻辑仅在1/2服务类中。

将来,如果出现新的业务类型,那么我们需要对控制器进行更改,并为新的业务类型相应地创建新的main类,YMLservice类,但不会。影响现有2种业务类型的2种已经运行的spring boot应用程序。这是一个好的设计吗?我们所有开发人员都签署了此设计,但我仍在研究更好的方法,并且还想向社区询问:)

我可以为每种业务类型创建不同的MS,然后分别运行。但是,保持按位存储,单击部署以及随着应用程序的增长而带来的麻烦。

0 个答案:

没有答案