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()
方法使用它。
重新启动边缘服务,您将看到返回的空列表。
再次启动商品目录服务,此列表最终将返回顶级品牌名称的完整列表。
原文地址:https://dzone.com/articles/spring-boot-microservices-building-microservices-a
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2007.html
暂无评论