如何使用Spring Boot构建微服务项目,读完这篇文章你就懂了

Spring Boot能够快速构建生产就绪的应用程序,并提供非功能性功能:

  • 易于使用容器部署的嵌入式服务器。
  • 它有助于监视多个组件。
  • 它有助于在外部配置组件。

那么,让我们看看微服务体系结构面临的挑战。

微服务体系结构的挑战

虽然开发一些较小的微服务看起来很容易,但是与微服务体系结构相关联的一些固有的复杂性。让我们看看一些挑战:

  • 自动化组件 :自动化所有事情变得很困难,因为有许多较小的组件而不是一个整体,即构建、部署、监视等。
  • 可感知性 :有许多小组件需要部署和维护,有时很难监控和识别问题。它需要对所有组件都有很强的感知能力。
  • 配置管理 :非常需要跨各种环境维护组件的配置。
  • 调试 :很难探测每个服务的错误。集中式日志记录和仪表板对于简化问题调试非常重要。
  • 一致性 :你不可能有一个广泛的工具来解决同一个问题。虽然促进创新很重要,但围绕用于实现/部署/监控微服务的语言、平台、技术和工具进行分散管理也很重要。

用Spring Boot构建应用架构

在这个Spring Boot microservices的例子中,我们将创建顶级运动品牌的应用程序,它将有三个服务:

1. Eureka服务-此服务将注册每个微服务,然后客户端微服务将查找Eureka服务器以获得相关的微服务来完成任务。这个Eureka服务器归Netflix所有,在这种情况下,springcloud提供了一种通过Java注释注册和调用服务的声明方式。

2. 商品目录服务-此服务将生成市场上流行的运动品牌列表。

3. 边缘服务-它类似于Bootiful开发中使用Spring Boot和Angular创建的独立项服务。但是,它将具有回退功能,在服务不可用时防止客户端接收HTTP错误

让我们看看创建这个Spring Boot microservices示例应用程序需要以下哪些工具。

如果您在安装和运行上述工具时遇到任何困难,请参阅本博客。

创建Eureka服务

首先,在EclipseIDE中创建一个EurekaServer Spring Starter项目。单击springstarter项目并单击Next。

将您的springstarter项目命名为EurekaServer,其他信息将自动填充。

注意:请确保您的Internet已连接,否则将显示错误。

现在,修改 EurekaServer/src/main/resources/application.properties 文件以添加端口号并禁用注册。

打开 EurekaServer/src/main/java/com/example/EurekaServiceApplication.java ,并在 @SpringBootApplication 上方添加 @enableurekaserver

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer @SpringBootApplication

此注释将配置允许其他应用程序通信的注册表。

启动应用程序:右键单击

项目->运行方式->单击“Spring Boot应用程序”

http://localhost:8761

现在打开 http://localhost:8761 。此处将打开Spring Eureka服务器,并显示没有服务正在运行。

Spring Boot Microservices:创建项目目录服务

再次创建新项目。使用 Item-catalog-service 作为工件名称,然后单击Next。

添加以下依赖项:

  • Actuator:帮助您监视和管理应用程序的功能
  • EurekaDiscovery:用于服务注册
  • JPA:保存/检索数据
  • H2:内存中的数据库
  • RestRepositories:将JPA存储库公开为REST端点
  • Web:springmvc和嵌入式Tomcat
  • DevTools:在文件更改时自动重新加载应用程序
  • Lombok:减少样板代码

单击Finish。

现在,创建一个实体 ItemCatalogServiceApplication.java 。下面的代码假设您将所有类放在同一个文件中。

如果您使用的编辑器不自动导入类,下面是 ItemCatalogServiceApplication.java 顶部所需的导入列表。

在item catalog service/src/main/resources/application.properties 文件中添加要显示在Eureka服务中的应用程序名称,并将端口设置为8088。

现在,创建云属性文件。

点击“文件”->“新建”->“其他”->“文件”,在该文件中添加以下代码并保存。

eureka.instance.hostname=${vcap.application.uris[0]:localhost}
eureka.instance.nonSecurePort=80
eureka.instance.metadataMap.instanceId=${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${server.port}}}
eureka.instance.leaseRenewalIntervalInSeconds = 5

eureka.client.region = default
eureka.client.registryFetchIntervalSeconds = 5
eureka.client.serviceUrl.defaultZone=${vcap.services.pwa-eureka-service.credentials.uri}/eureka/

现在,启动应用程序:

右键单击Project->Run As->单击“Spring Boot应用程序”

注意:如果出现错误,请尝试以下步骤:右键单击项目->运行方式->单击“Maven Build”

现在打开 http://localhost:8761 。您将看到项目目录服务将运行。

您将看到目录服务中的项目列表。

现在让我们继续创建边缘服务。

创建边缘服务

它类似于Bootiful开发中使用Spring-Boot和Angular创建的独立项服务。但是,它将具有回退功能,在服务不可用时防止客户端接收HTTP错误。

再次创建新项目。对项目名称使用边缘服务:

  • Eureka Discovery :用于服务注册
  • Feign :声明式web服务客户机
  • Zuul :提供智能路由
  • Rest Repositories :将JPA存储库公开为Rest端点
  • Web :springmvc和嵌入式Tomcat
  • Hystrix :一种断路器,用于停止连锁故障并实现恢复能力
  • Lombok :减少样板代码

点击完成:

由于 item-catalog-service 在端口8088上运行,因此需要将此应用程序配置为在其他端口上运行。修改 edge service/src/main/resources/application.properties 以将端口设置为8089并设置应用程序名称。

现在,创建云属性文件。

点击“文件”->“新建”->“其他”->“文件”,在此文件中添加以下代码并保存。

eureka.instance.hostname=${vcap.application.uris[0]:localhost}
eureka.instance.nonSecurePort=80
eureka.instance.metadataMap.instanceId=${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${server.port}}}
eureka.instance.leaseRenewalIntervalInSeconds = 5

eureka.client.region = default
eureka.client.registryFetchIntervalSeconds = 5
eureka.client.serviceUrl.defaultZone=${vcap.services.pwa-eureka-service.credentials.uri}/eureka/

要在Eureka服务器上启用Feign、Hystrix和注册,请向 EdgeServiceApplication.java 添加适当的注释:

在同一个文件中创建项目DTO(数据传输对象)。Lombok将生成一个方法、getter、setter和适当的构造函数。

创建一个 ItemClient 接口,该接口使用Feign与itemcatalog服务通信。

在ItemClient下面创建一个 RestController ,它将过滤掉少于顶级品牌的内容,并显示/top brands端点。

使用Maven或IDE启动边缘服务应用程序,并验证它是否已成功注册到Eureka服务器。

现在调用 localhost:8089/top-brands ,您将看到目录服务中的顶级品牌列表。

注意:如果关闭 item-catalog-service 应用程序,将出现500内部服务器错误。

要解决这个问题,可以使用Hystrix创建一个 fallback 方法,并告诉 goodItems() 方法使用它。

重新启动边缘服务,您将看到返回的空列表。

再次启动商品目录服务,此列表最终将返回顶级品牌名称的完整列表。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容