阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用 Java 构建微服务

461次阅读
没有评论

共计 2999 个字符,预计需要花费 8 分钟才能阅读完成。

【编者的话】本文翻译自 Dzone Guide to the Java Ecosystem,Dzone 是一个关于 Java 的优秀网站。文中介绍了几种用 Java 构建微服务的方法,包括 Container-less,Self-contained,以及 In-container。翻译经验不足,如有错误,请慷慨指出。

快速浏览

  1. 在 Java 生态中,构建微服务的策略包括 Container-less,Self-contained,以及 In-container 等。
  2. Container-less 微服务将应用及其依赖打包成一个单一的 jar 文件。
  3. Self-contained 微服务也是打包成一个单一的 Jar 文件,但它还包括一个嵌入式框架,这个框架含有可选的第三方 lib,当然这些 lib 是兼容的。
  4. In-container 微服务打包成一个完整的 Java EE 容器,该服务在 Docker 镜像中实现。
    基于微服务的架构给架构师和开发者带来了新的挑战,然而,随着语言的升级和工具数量的增加,开发者和架构师完全有能力应对这样的挑战。Java 也不例外,本文探讨了在 Java 生态系统内构建微服务的不同方法。

介绍

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

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

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

container-less

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

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

使用 Java 构建微服务

 

$ java -jar myservice.jar

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

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

Self-contained

另一个单一 JAR 部署的变形是使用嵌入式框架构建微服务。在该方法中,框架提供了所需服务的实现,同时,开发者可以选择哪一些东西要包含在该服务中。

你可能认为这与 Container-less 的解决方案一样,但我在这里要区分一下它们,因为 self-cotained 方法允许你使用第三方 lib 库,并且你知道这些 lib 库是兼容的。

使用 Java 构建微服务

该方法涉及到像 Spring Boot 和 Wild Swarm 之类的工具。

Spring Boot

Spring 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。

Self-contained 方法的优点是你可以只挑选足以让服务运行的组件。

该方法的缺点是配置有点复杂,以及由此产生 JAR 文件有点大,因为它的构建是为了实际服务中所需的容器功能。

In-container

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

使用 Java 构建微服务

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

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

该方法的另一个优点是实际应用程序代码并不依赖于部署该代码的 Java EE 应用服务器,无论是 GlassFish,WildFly,Weblogic,WebSphere,或其他 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(翻译:洪国安)

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-11/124997.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2999字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985897
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...