使用 Spring Boot 和 Spring Cloud 的微服务项目结构
Posted
技术标签:
【中文标题】使用 Spring Boot 和 Spring Cloud 的微服务项目结构【英文标题】:Microservice project structure using Spring boot and Spring Cloud 【发布时间】:2018-04-26 05:32:12 【问题描述】:我正在尝试使用 Spring Boot 和 Spring Cloud 将普通的单体 Web 应用程序转换为微服务结构。我实际上是在尝试创建 Angular 2 前端应用程序并将这些称为我在云中开发的微服务。而且我已经开始将模块分解成独立的进程结构,用于微服务架构。
这里我的疑问是,在设计控制流和微服务结构架构时,我是否可以在整个 Web 应用后端流程中只使用一个使用不同控制器的 Spring Boot 项目?
我在某处发现,当我阅读时,使用 2 个不同的 Spring Boot 项目开发所有微服务。我是 Spring 和 Spring Cloud 的新手。是否可以使用不同的模块在单个项目中创建所有服务?
【问题讨论】:
【参考方案1】:实际上,将所有这些服务打包到一个项目中并不重要。但在微服务看来,你应该把它们分成许多独立的项目。在转换原始架构之前,您可以问自己几个问题。
您的应用程序很关键吗?当您必须重新部署整个软件包以仅更新一项服务时,用户能否容忍停机? 如果服务之间没有任何依赖关系,为什么要将它们放在一起?是不是很难开发和维护? 各项服务的使用率是否相同?也许您可以隔离那些经常被调用的服务并将它们部署到强大的服务器上。尝试阅读这篇文章Adopting Microservices at Netflix: Lessons for Architectural Design,了解设计微服务架构的最佳实践。对于使用 Spring Cloud 进行开发,您还可以阅读这篇文章 Spring Cloud Netflix 以了解您应该在架构中使用哪些组件。
【讨论】:
【参考方案2】:目前我也在做微服务,根据我的经验,我们设计微服务的步骤如下,
Maven
您应该使用不同的项目创建项目。但实际上你可以将你的项目分成子模块。这样您就可以轻松管理您的项目,也可以将子模块与其他项目一起使用。 构建 Jar 库将您的本地存储库。它可以节省您的时间,您只需找到相同的组件或功能,然后构建放入本地存储库中的 jar 文件,因此每个使用此函数调用点的项目都可以下载此存储库,您不必编写很多项目一样的。所以最后我希望你创建不同的 springboot 项目,但只需创建子模块并构建本地存储库。
【讨论】:
【参考方案3】:通过在不同的项目中创建模块,您可以创建更灵活的解决方案。
您甚至可以在一项服务中使用不同的语言和技术。例如。您的一项服务可能是 NodeJS,其余的可能是 Java/Spring。
【讨论】:
以上是关于使用 Spring Boot 和 Spring Cloud 的微服务项目结构的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门
spring boot 学习 ---- spring boot admin