快速浏览
介绍本文不会探讨微服务是好还是坏,也不会建议你应该事先使用微服务设计你的app,或者当他们在monolith应用出现时,就应该提取这些服务。 container-less在Container-less方法中,开发者要将所有位于JVM顶层的一切事物作为应用的一部分。 $ java -jar myservice.jar
Self-contained另一个单一JAR部署的变形是使用嵌入式框架构建微服务。在该方法中,框架提供了所需服务的实现,同时,开发者可以选择哪一些东西要包含在该服务中。 该方法涉及到像Spring Boot和Wild Swarm之类的工具。 Spring BootSpring Boot和Spring Cloud Netflix 项目对使用Java构建微服务有着很好的支持。Spring Boot允许你挑选各种Spring生态系统中的工具,以及流行的第三方工具,并将这些工具和你的应用打包在一起。Spring Initializr使得你可以使用简单复选框列表的方式完全这一工作,这里有一个简单的Hello World服务的例子,Gist Sinppet。 Wildfly Swarm在Java EE中,与Spring Boot相对应的就是Wildfly Swarm。它允许你挑选所需的部分Java EE规范,并将其和应用以JAR文件的形式打包在一起。Hello World的例子,Gist Snippet。 In-container虽然要求一个完整的Java EE容器能够部署一个微服务,似乎需要很大的开销,但是,需要记住的是:一些开发者主张微服务的“微”不意味着这个服务要微小或简单。 在这些案例中,将Java EE容器视为所需平台似乎是合适的,因为你所需的唯一依赖是Java EE API。注意:由于其实现是由容器提供,因此该依赖项已经满足了。这意味着由此产生的WAR文件是极其精实的,该服务的实现和上述Wildfly Swarm的例子一样,参考这里,Gist Snippet。 DockerDocker从这里开始。通过将Java EE容器和服务实现打包进Docker镜像,你可以或多或少地取得和单一JAR开发同样效果。不同的是服务现在位于容器内,而不是JAR文件中。 Dockerfile FROM jboss/wildfly:9.0.0.1.final ADD myservice.war /opt/jboss/wildfly/standalone/deployments
docker run -it -p 8081:8080 myorganization/myservice Snoop细心的读者可能之前注意到Spring Boot代码段中的@EnableErekaClient注解,该注解在Eureka中进行服务注册,使得它可以被服务请求者所发现。Eureka是 Spring Cloud Netflix包中的一部分,它是一种极其容易使用和配置的服务发现解决方案。 总结在构建微服务时,Java是一个很好的选择。这里所描述的方法都可以很好地完成任务。至于你个人的特殊情况,最佳方法取决于其服务 需求。对于简单的服务,一个container-less或者self-contained服务是最佳选择,但借助于in-container的实现,开 发者可以更快,更简单地实现高级服务。总之,对于微服务的实现,Java是一种行之有效的生态系统。 |