Java 带有Spring Boot、Netflix、Docker和Maven的微服务。如何组织发展?

Java 带有Spring Boot、Netflix、Docker和Maven的微服务。如何组织发展?,java,spring-boot,docker,microservices,netflix,Java,Spring Boot,Docker,Microservices,Netflix,我是Microservices的新手,我选择以下堆栈作为练习 我想用Spring boot、Netflix API和Maven构建一些API 对微服务进行Dockerize,这样我就可以在CloudFoundry中部署,也可以在Kubernetes或AWS上部署 使用javascript框架构建PWA并调用这些API 有点雄心勃勃 我知道微服务将单独部署。我知道web应用程序将首先连接到网关,等等 但是作为一名新的开发人员,他开始在一个开发搜索产品api的团队中工作,例如,我是否会打开我的STS

我是Microservices的新手,我选择以下堆栈作为练习

  • 我想用Spring boot、Netflix API和Maven构建一些API
  • 对微服务进行Dockerize,这样我就可以在CloudFoundry中部署,也可以在Kubernetes或AWS上部署
  • 使用javascript框架构建PWA并调用这些API
  • 有点雄心勃勃

    我知道微服务将单独部署。我知道web应用程序将首先连接到网关,等等

    但是作为一名新的开发人员,他开始在一个开发搜索产品api的团队中工作,例如,我是否会打开我的STS,克隆唯一的存储库,即microservices项目(包括网关、注册表、配置服务器),还是克隆包含我需要处理的spring boot项目的存储库?在第一种情况下,有一个带有模块的父pom项目,并可能共享一些JAR似乎是有意义的。。不知道

    我想我可能已经找到了我想要的部分答案

    这些问题非常广泛。我想你应该先读一读

  • eric evans的领域驱动设计
  • sam newman构建微服务
  • 接下来,您应该了解一些架构设计模式。 查看事件源、CQR、APi网关、服务注册和常规云模式。这份名单可能会更长,但这是一个好的开始

    然后,基本上您的api网关应该是所有前端调用到达并通过安全、监视和路由的地方

    api网关将联系eureka服务注册中心,获取您路由到的服务的位置信息

    您的所有服务应用程序都将向eureka注册,并从配置服务器获取这些配置

    如果您将其构建为一个生产应用程序,那么很可能所有这些应用程序都位于不同的存储库中。为了促进架构堆栈的所有部分,大多数大型公司都会有监管和业务指导,这意味着在某些情况下,独立的团队将处理每个部分,或者他们将在其他组织中处理垂直部分。如果您处于启动环境中,可能会要求您处理完整的体系结构

    试想一下,如果您是一家公司的一名员工,该公司可能拥有数百个内部API,那么您是否可以在API网关上构建所有服务并管理监控、路由和安全性?可能不会

    我认为,如果您只是简单地学习模式和实现,那么作为一个开发人员,将其放在一个项目中会简单得多

    这是我对此的看法。您可以很容易地找到教程来解释如何构建这些模式和应用程序,但它们通常只是向您展示如何开始。我建议,如果你这样做是为了了解你选择了一些有趣(虚假)的商业想法,并开始构建/学习

    希望这是有益的好运


    PS:请查看sleuth和zipkin的分布式跟踪功能,这是对您的问题的更实际的回答

    项目结构:

    多模块项目最适合高度耦合的微服务。意思是:它们将被单独使用,并将基础设施的其余部分视为一项单一服务

    在现实世界中,您使用的是微服务体系结构,因此大多数(如果不是全部的话)应用程序都可以从基础架构中的任何微服务中获益。将其视为一个网络,其中每个节点都是一个公开服务的应用程序。我建议每个微服务有一个独立的spring boot项目

    微型服务对接:

    实现这一目标的最简单方法是:

  • 打包您的spring boot项目:使用maven(maven目标包)。这将创建一个可执行的jar文件
  • 创建包含并运行jar文件的Dockerfile:。比如:
  • 创建docker映像:
    docker构建-t ms:latest path/to/Dockerfile
  • 考虑到对于生产,您可能需要添加多个应用程序实例、使用更强大的应用程序服务器或调整JVM初始化参数。这只是一个基本的程序,让你从某件事开始


    我将把它留到这里,因为您的问题涉及到如何构建项目以及如何使用maven将spring boot应用程序打包到docker映像中。

    部署到Cloud Foundry时,不需要“Dockerize”,因为Cloud Foundry容器已经管理了它。AWS也一样。我相信这两个平台都允许你管理自己的容器,如果你真的想折磨自己的话。就整个项目而言,我建议从小处着手,逐步扩大范围。这将帮助你避免不知所措和放弃。从一个小的可交付成果开始,制定一个实施计划,您可以在最终达到最终设计目标的积压工作中跟踪该计划。我相信,当您处理积压工作时,您会看到您最初的想法逐渐发生变化

    问题太宽泛了。我想知道我是否应该使用多模块项目,这意味着是否应该共享服务注册表、配置服务器和网关。谢谢,你回答了我的一个问题。另一个问题是,这3个项目(服务注册表、网关、配置服务器)是否在微服务之间共享?例如,我是否可以将它们打包到一个罐子中,并将它们导入每个微服务的每个pom中?@Gfalco它们将在微服务之间共享。@Gflaco Gotcha,微服务是独立的应用程序,它们通过公开的端点相互通信。您可以开发请求,而不是在项目中使用依赖项/库
    FROM jdk:latest
    EXPOSE 8080
    WORKDIR /srv
    COPY ms.jar .
    CMD java -jar ms.jar