千家信息网

如何使用Java来构建微服务

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,如何使用Java来构建微服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。要构建微服务,Java是一个非常好的选择。如何
千家信息网最后更新 2025年02月04日如何使用Java来构建微服务

如何使用Java来构建微服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

要构建微服务,Java是一个非常好的选择。如何在容器中使用Java构建微服务?为你讲述了三种构建方案,无论是哪种方案,要实现微服务,使用Java生态圈的组件都是经过业界验证的。

概览

1. 在Java生态系统中构建微服务的策略有三种,分别为:无容器、自成容器、外置容器。
2. 以无容器的方式提供微服务,会把整个应用打包,包含所有依赖,打进一个fat JAR包中。
3. 自成容器的微服务同样也是打成单个JAR包,JAR包中会包含带有第三方类库的嵌入式框架。
4. 外置容器的微服务方式,会把整个Java EE容器和服务的实现打包进一个Docker容器。

基于微服务的架构给架构师和开发者带来了新的挑战,不断出现的新语言和开发工具使我们得以应对这个挑战。Java也不例外,本文将探索在Java生态系统中构建微服务的新思路。

不讨论微服务的好坏,也不讨论你是否应该一开始就以微服务架构来设计应用,或者是否应该将已有的庞大应用重构成微服务架构。

这里讨论的方法并不是仅有的方法,但它们会为我们看到其他可能带来启发。虽然本文的重点是Java生态系统,但其中的概念对其他语言和技术也通用。

我在本文命名了几种方式为"无容器"、"自成容器"、"外置容器"。这些术语并未被广泛使用,但是它们能足以区分每种方法的特点,我会在以下小节中讨论。

无容器方案

在无容器的方式中,开发者把JVM上的所有组件都看作应用的一部分。

无容器的方式使用单个JAR包部署(所谓的"fat JAR部署"),意味着,这个应用以及它所有的依赖,都被打包成一个JAR文件,这个JAR可被作为独立的Java进程启动。

```sh
$ java -jar myservice.jar
```
这方法其中一个优点是,可以根据需要非常简单地停启服务,以达到扩容或缩容的目的;另一个优势是方便实现分布式部署,只需要同步一个JAR文件就可以了。

另一方面,它的缺点是类库依赖的兼容性问题。例如你需要使应用支持事务特性,你只能靠自己了,或者需要引入支持这个功能是第三方类库。以后,每当你需要支持其他特性,例如说,持久化,就很可能会遇到类库之间的兼容性问题。

自成容器方案

单JAR包的部署方式有一个变体,就是把你的服务基于一个内置框架构建。通过这种方法,框架可以提供服务所需要的特性,开发者可以自行选择哪些特性被包含在服务内。

你可能会争论说这和"无容器"方案不是一模一样吗?但是,在这我想特地区分开它们,因为"自成容器"的方案实际上会提供一套具兼容性的第三方类库。
这种情况下,把Java EE容器作为一个必要的基础似乎是适当的。因此,你唯一需要的是Jave EE的API。注意这些依赖已经由容器提供好了,这意味着最终应用的WAR文件会非常小。这种微服务的实现方式和上边的Wildfly Swarm例子一样:[Gist Snippet](https://gist.github.com/ivargrimstad/c368221fa079285856e7)

这种方式的优点是,容器通过标准的API提供了已验证标准功能的实现,因此,作为一个开发者,你可以不关心底层细节,完全集中在业务功能上。

这个方案的另一个优点是,应用层的代码并不依赖于它所部署的Jave EE应用服务器,无论它是[GlassFish](https://glassfish.java.net/), [WildFly](http://wildfly.org/), [WebLogic](http://www.oracle.com/us/products/middleware/cloud-app-foundation/weblogic/overview/index.html), [WebSphere](http://www.ibm.com/software/websphere)或者任何其他Jave EE兼容的实现。

缺点是你需要把服务部署进一个容器中,所以一定程度上增加了部署的复杂度。

Docker

[Docker](https://www.docker.com/)现在要出场了,通过把Java EE容器和服务的实现打包进一个Docker镜像,可以达到和单JAR包方式部署差不多的效果,不同之处是服务是打包进一个Docker镜像而不是一个JAR包了。

```sh
Dockerfile

FROM jboss/wildfly:9.0.1.Final
ADD myservice.war /opt/jboss/wildfly/standalone/deployments
```

通过启动Docker引擎中的镜像来开启这个服务。

```sh
$ docker run -it -p 8081:8080 myorganization/myservice
```

Snoop
细心的读者可能注意到前边Spring Boot示例中的@EnableEurekaClient注解,这个注解通过Eureka把服务注册了,让它能被服务的消费者发现。[Eureka](https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance)是Spring Cloud Netflix工具集的一部分,能极度简化服务发现的配置。

Java EE并没有提供这个特性,但是相应的有几个开源的方案。其中一个是[Snoop](https://github.com/ivargrimstad/snoop),与Eureka有[类似的功能](https://github.com/ivargrimstad/snoop),要使Java EE微服务能被路由到,唯一要做的一件事是使用@EnableSnoopClient注释,详见示例:[Gist Snippet](https://gist.github.com/ivargrimstad/34bfe4b5368a35d30007)

要构建微服务,Java是一个非常好的选择,文中提到的任何一个方案都可以实现。对于相对简单的服务来说,"无容器"或"自成容器"是更好的选择,但是使用外置容器的方式,能更快捷简单地构建更复杂的服务。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

服务 容器 方式 方案 应用 自成 特性 开发 功能 开发者 方法 架构 生态 支持 选择 优点 兼容性 文件 框架 第三方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 王者显示服务器爆满怎么弄 网络安全作文初一500字 数据库系统数据存储粒度大还是小 西安一码通软件开发成本 国信安网络安全 网络安全一百强 数据库外连接怎么一次连接两个表 什么叫零极数字网络技术 数据库怎么开启关闭 网络安全需要做些什么 怎样在手机上学习软件开发 上海宝酷网络技术 网络安全信息保护办公室 海康存储服务器价格 大连软件开发工作好找吗 可信软件开发能力认证考试 数据库任务与事务对比 青岛讯博网络技术怎么样 川大数据库技术第二次作业 计算机考试3级网络技术原题 服务器网络故障维修 苹果id没法连接服务器 工信部网络安全定级备案 高中网络安全和网络文明 数据库怎么设置一级管理员 个人邮件处理系统数据库设计 数据库应用技术教程课后习题答案 灵汐科技互联网大会成果 辽宁网络安全大讲堂观后感 网络安全三年级海报简单文字内容
0