美文网首页Java 杂谈
基于Java构建微服务

基于Java构建微服务

作者: _年少无为 | 来源:发表于2019-01-12 15:41 被阅读2次

简介

  1. 在JAVA的生态系统中构建微服务的策略主要有:container-less, self-contained, 以及in-container.
  2. Container-less的微服务是将应用程序以及所有的依赖库打包到单个的JAR文件中。
  3. Self-contained的微服务也是把所有打包到单个的JAR文件中,但是它包含一个嵌入式的框架,这个框架含有可选的兼容第三方库。
  4. n-container的微服务则是把整个Jave EE容器以及其服务实现打包成单个Docker镜像。

基于微服务的架构给架构师和开发者带来了新的挑战。随着语言和工具数量的增加,从而使开发者和架构师完全有能力企业应对这样的挑战。Java也不例外,本文探讨了在Java生态系统内构建微服务的不同方法。

小编给大家推荐一个Java技术交流群:937053620!群内提供设计模式、spring/mybatis源码分析、高并发与分布式、微服务、性能优化,面试题整合文档等免费资料!给大家提供一个交流学习的平台!

介绍

本文不会探讨微服务是好是坏,也不会建议你应该事先使用微服务设计你的App,或者当他们在作为单体应用出现时,就应该提取这些服务。

这里所描述的方法并不是唯一的,但它可以让你对这些可能性有一个良好的总览。虽然Java生态是本文所关注的主要领域,但这些理念也可迁移到其他语言和技术中。

在文中,我将这几种方法分别称为Container-less,Self-contained,以及In-container。这些术语可能尚未被完全确立,但在这里,它们可以达到区分这几种方法的目的。我会在接下来的几个部分中分别阐述它们的意义。

Container-less

在Container-less方法中,开发者要将所有位于JVM顶层的一切事物作为应用的一部分。

Container-less方法使得所谓的单一JAR部署成为可能(也称作“fat JAR”部署),这意味着,应用及其依赖可以打包在一个单一的JAR文件,并作为一个独立的Java程序运行。

$ java -jar myservice.jar

这种方法的优点是:当应用在进行扩展和收缩时,服务的启动和停止是极其轻松的。另一个优点是部署简单,你只需传递一个JAR文件。

该方法的缺点是lib库的兼容性,你需要自己独立解决一些像事务处理之类的事情,或者需要引入第三方lib库为方案提供支持。随后,如果你需要像持久性之类的支持,你可能需要面对lib库兼容性的问题。

Self-contained

另一种单jar部署就是使用一个嵌入式框架来构建服务。在此方法中,框架提供了所需服务的实现方法,开发者可以选择在项目中包括哪些服务。

你可能会认为这个方法与container-less完全一样,但笔者认为,两者的区别在于,self-contained方法会提供一套相互兼容的第三方库。所以,该方法不存在库兼容性问题。

该方法可能涉及Spring Boot、Wildfly Swarm之类的工具。

Spring Boot

Spring Boot和Spring Cloud Netflix的项目对使用Java来构建微服务提供了很好的支持。Spring Boot允许你挑选各种Spring生态系统中的工具,以及流行的第三方工具,并将这些工具和你的应用打包在一起。Spring Initializr使得你可以使用简单复选框列表的方式完成这一工作,这里有一个简单的Hello World服务的例子,Gist Snippet。

Wildfly Swarm

在Java EE中,和Spring Boot相对应是WildFly Swarm。它允许你根据自己的需求挑选 Java EE 规范,然后把它们和你的应用程序打包成一个 jar 文件。这里有一个简单的 Hello World 示例:Gist Snippet。

self-contained 方法的优点是你可以自主选择用于服务运行的项目。
这种方法的缺点是配置更加复杂,由于它在实际的服务中构建所需的容器功能,由此产生的 jar 文件也会稍大一些。

In-container

虽然在Java EE容器中部署微服务的开销似乎很大,然而,一些开发者认为,微服务中的“微”并不表示该服务很小或者简单。

在这些案例中,将Java EE容器作为所需平台似乎是合适的。因此,你唯一需要的依赖就是Java EE API。注意,由于该依赖的实现是由容器提供的,因此该依赖项已经满足了,这也就意味着所产生的war文件是非常精简的,该服务的实现与上面Wildfly Swarm的例子是一样的:Gist Snippet。

该方法的优点是,容器通过标准API提供了经过测试和验证的标准功能的实现。因此,开发者可以完全聚焦于业务功能,并在应用代码之外维护底层代码。

另一个优点是,应用程序代码不依赖Java EE应用服务器,无论该应用部署到GlassFish, WildFly, WebLogic, WebSphere还是任何一个与Java EE兼容的其他实现系统。

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

Docker

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

Dockerfile

FROM jboss/wildfly:9.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 生态系统都能提供行之有效的实现方法。

其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个Java交流群937053620,不管你是小白还是大牛欢迎入驻,大家一起交流成长

相关文章

  • 基于Java构建微服务

    简介 在JAVA的生态系统中构建微服务的策略主要有:container-less, self-contained,...

  • maven常用命令介绍

    一、Maven的基本概念 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。1.1、项目构建 项目构建...

  • Maven

    一、 Maven 简介 Maven 可译为“知识的积累”、 “专家”, 主要服务于基于 Java 平台的项目构建、...

  • maven(一)下载,安装和配置

    01.maven的简介 maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理。 构建:它是一个非...

  • Maven入门学习总结

    简介 Maven主要服务于基于Java平台的项目构建,依赖管理,项目信息管理,是跨平台的项目管理工具 项目构建...

  • 分布式监控系统WGCLOUD,v2.3.5更新日志

    WGCLOUD基于java语言开发,是微服务架构构建监控系统,支持高并发高性能高可用,核心模块包括:服务器集群监控...

  • 使用Spring Boot构建微服务

    Spring Boot是一个广泛用来构建Java微服务的框架,它基于Spring依赖注入框架来进行工作。Sprin...

  • xkernel微内核系统核心包

    xkernel微内核系统工具 简介 xkernel是一个基于java SPI思想的类加载工具包,是构建微内核系统的...

  • maven笔记day01

    1、maven 是什么 maven主要服务于基于java平台的项目构建、依赖管理、项目信息管理。它提供了中央仓库,...

  • 《分布式Java应用基础与实践》PDF下载地址

    本书分为基于Java实现网络通信、RPC;基于SOA实现大型分布式Java应用;编写高性能Java应用;构建高可用...

网友评论

    本文标题:基于Java构建微服务

    本文链接:https://www.haomeiwen.com/subject/lhhcdqtx.html