使用 Java 构建微服务(2)

虽然要求一个完整的Java EE容器能够部署一个微服务,似乎需要很大的开销,但是,需要记住的是:一些开发者主张微服务的“微”不意味着这个服务要微小或简单。

in-container.png


在这些案例中,将Java EE容器视为所需平台似乎是合适的,因为你所需的唯一依赖是Java EE API。注意:由于其实现是由容器提供,因此该依赖项已经满足了。这意味着由此产生的WAR文件是极其精实的,该服务的实现和上述Wildfly Swarm的例子一样,参考这里,Gist Snippet

这种方法的优点是该容器通过标准APIs提供了测试和验证标准功能的实现,因此,作为一名开发者,你可以完全集中于业务功能,并且在应用代码之外维护底层代码。

该方法的另一个优点是实际应用程序代码并不依赖于部署该代码的Java EE应用服务器,无论是GlassFishWildFlyWeblogicWebSphere,或其他Java EE兼容性实现。

该方法的缺点是你需要将该服务部署在容器中,这增加了部署的复杂性。

Docker

Docker从这里开始。通过将Java EE容器和服务实现打包进Docker镜像,你可以或多或少地取得和单一JAR开发同样效果。不同的是服务现在位于容器内,而不是JAR文件中。

Dockerfile
FROM jboss/wildfly:9.0.0.1.final
ADD myservice.war /opt/jboss/wildfly/standalone/deployments


通过启动Docker引擎中的Docker镜像,唤醒该服务。

docker run -it -p 8081:8080 myorganization/myservice
Snoop

细心的读者可能之前注意到Spring Boot代码段中的@EnableErekaClient注解,该注解在Eureka中进行服务注册,使得它可以被服务请求者所发现。Eureka是Spring Cloud Netflix包中的一部分,它是一种极其容易使用和配置的服务发现解决方案。

Java EE没有在外部提供这样的机能,但这里有几种开源方案。其中一种就是Snoop,其功能与Eureka类似。为了使一个Java EE微服务可以用于服务查找,唯一需要做的是使用@EnableSnoopClient注解,如本例所示:Gist Snippet

总结

在构建微服务时,Java是一个很好的选择。这里所描述的方法都可以很好地完成任务。至于你个人的特殊情况,最佳方法取决于其服务需求。对于简单的服务,一个container-less或者self-contained服务是最佳选择,但借助于in-container的实现,开发者可以更快,更简单地实现高级服务。总之,对于微服务的实现,Java是一种行之有效的生态系统。

更多关于微服务的见解,JVM语言,以及在Java中的趋势,可以在 DZone Guide to the Java Ecosystem!获取到。

原文链接: Building Microservices With Java(翻译:洪国安)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9de1da41012de453332ba4e39f82963a.html