我们在公司中使用微服务(MS)架构。有一个数据库MS将JSON封装在Response
类中,然后将其发送到另一个MS OutputFormatter
,该MS格式化JSON以根据业务类型以不同方式发送(到目前为止,有2种,但是它在Response
类的一个字段中定义。该MS将具有格式化响应的同一个类的新对象返回给DB MS,MS最终将其持久保存在DB中。
现在,我创建了:
Main
类Main1
和Main2
。OutputService
和Bus1OutputService
每种业务类型的实现者的接口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
类,YML
和service
类,但不会。影响现有2种业务类型的2种已经运行的spring boot应用程序。这是一个好的设计吗?我们所有开发人员都签署了此设计,但我仍在研究更好的方法,并且还想向社区询问:)
我可以为每种业务类型创建不同的MS,然后分别运行。但是,保持按位存储,单击部署以及随着应用程序的增长而带来的麻烦。