当前位置:   article > 正文

【微服务-SpringCloud】详细介绍,搭建一套微服务项目_springcloud搭建一个微服务项目

springcloud搭建一个微服务项目

目录

微服务介绍

微服务的特点

微服务的优势

微服务的挑战

Spring Cloud介绍

Spring Cloud核心概念

为什么使用Spring Cloud

Spring Cloud 使用项目案例

技术栈

环境准备

创建项目

用户服务(User Service)

pom.xml

application.yml

UserController.java

User Service 启动类

订单服务(Order Service)

pom.xml

application.yml

OrderController.java

Order Service 启动类

创建 Eureka Server

启动与验证


微服务介绍

微服务(Microservices)是一种软件架构风格,它将一个大型的应用程序分解成一系列小的、自治的服务单元。

每个服务单元都围绕着特定的业务能力构建,可以独立部署、运行和扩展,它们之间通过API(通常采用HTTP RESTful API)进行轻量级通信。

这种架构风格强调服务的松耦合、高内聚和业务领域的边界清晰。下面是微服务的详细特点和优势:

微服务的特点

  1. 单一职责:每个微服务只关注一个业务功能,遵循“做一件事并做好”的原则。

  2. 自治性:服务是独立的,拥有自己的数据库和业务逻辑,能够独立部署和扩展,不受其他服务影响。

  3. 服务间通信:通过API进行通信,常用的方式包括RESTful API、gRPC、消息队列等。

  4. 技术多样性:不同服务可以根据需要选择最合适的技术栈,包括编程语言、数据库、框架等。

  5. 分布式系统:微服务架构天然面向分布式环境,需要考虑服务间的事务管理、服务发现、负载均衡等问题。

  6. 去中心化治理:服务的管理、配置、监控等分散到各个服务中,而不是集中控制。

  7. 持续集成/持续部署(CI/CD):支持频繁的迭代和快速部署,便于快速响应市场变化。

微服务的优势

  • 灵活性和可扩展性:容易添加或修改服务,快速适应业务需求变化,独立扩展高负载服务。

  • 故障隔离:一个服务的故障不会直接影响到其他服务,提高了系统的整体稳定性。

  • 开发效率:小团队可以独立负责一个或几个服务,加快开发速度,简化协作复杂度。

  • 技术选型自由:每个服务可以根据需要选择最合适的工具和技术,促进技术创新。

  • 易于部署和测试:服务独立部署,测试范围缩小,便于进行自动化测试和持续交付。

微服务的挑战

  • 分布式复杂性:需要处理服务发现、配置管理、数据一致性、网络延迟等问题。

  • 运维复杂度:监控、日志、安全、分布式事务管理变得更加复杂。

  • 接口管理:服务间大量的API调用需要有效的管理和版本控制。

  • 团队文化和组织结构:需要跨职能团队紧密合作,同时保持服务间的界限清晰。

微服务架构的设计和实施要求对分布式系统有深入的理解,并且在团队组织、开发流程、运维体系等方面都需要做出相应的调整,以充分利用其带来的优势,同时应对伴随而来的挑战。


Spring Cloud介绍

Spring Cloud是Spring家族中的一个项目,它为开发人员提供了一套全面的工具和框架,用于快速构建分布式系统和微服务架构。

Spring Cloud基于Spring Boot,利用其“约定优于配置”的理念,大大简化了构建复杂云应用程序的任务。

Spring Cloud核心概念

  • 服务发现与注册:Spring Cloud集成了Eureka、Consul、Zookeeper等服务发现组件,使得微服务实例能够自动注册到服务注册中心,并能够发现其他服务的位置,实现服务间的互相调用。

  • 配置中心:通过Spring Cloud Config,可以实现配置的集中管理和外部化存储,支持配置的动态刷新,方便不同环境下的配置管理。

  • 负载均衡:集成Ribbon、Spring Cloud LoadBalancer等组件,为服务间的调用提供负载均衡能力,提高系统的可用性和响应速度。

  • 断路器:通过Hystrix(已维护较少,推荐使用Resilience4j)等组件,实现服务调用的容错处理,防止服务雪崩效应,增强系统的稳定性和韧性。

  • API网关:Spring Cloud Zuul和Spring Cloud Gateway作为API网关,提供了路由、过滤、鉴权等功能,是微服务架构中的重要组成部分。

  • 消息总线:Spring Cloud Bus支持配置的广播更新,以及通过消息驱动的方式触发服务实例的刷新操作。

  • 分布式跟踪:Spring Cloud Sleuth与Zipkin集成,帮助开发者收集和分析服务间的调用链路,便于问题排查和性能监控。

  • 安全认证:Spring Cloud Security与OAuth2集成,为微服务应用提供安全认证和授权功能。

为什么使用Spring Cloud

  • 简化微服务架构:Spring Cloud提供了一系列成熟的解决方案,降低了微服务架构的实现难度,使得开发者可以专注于业务逻辑。

  • 快速集成:基于Spring Boot的自动配置,只需少量配置或无配置即可快速集成微服务所需的各种功能组件。

  • 生态丰富:Spring Cloud与Spring Boot、Spring Data、Spring Security等Spring项目深度集成,且与众多第三方服务和中间件有良好的适配,形成了一个强大的生态系统。

  • 持续更新与支持:Spring Cloud持续跟进微服务领域的新技术和最佳实践,确保了技术栈的现代性和前瞻性。

总之,Spring Cloud为微服务架构提供了全方位的支持,是构建可扩展、高可用、易于管理的微服务系统的重要工具。


Spring Cloud 使用项目案例

假设我们要构建一个简单的微服务项目,其中包括用户服务(User Service)和订单服务(Order Service),两者之间需要进行交互。

我们将使用Spring Boot整合Spring Cloud来实现这一目标。

技术栈

  • Spring Boot: 作为基础框架,快速启动服务。
  • Spring Cloud: 提供微服务治理能力。
  • Eureka: 服务发现与注册。
  • Ribbon: 客户端负载均衡。
  • Feign: 声明式服务调用。

环境准备

确保您已安装Java Development Kit (JDK) 8 或更高版本,并配置好Maven或Gradle。

创建项目

使用Spring Initializr创建两个SpringBoot项目,分别为User Service和Order Service。选择相应的依赖项:

  • 对于每个服务,选择“Web”作为基本依赖。
  • 选择“Eureka Discovery”以便于服务发现。
  • 对于Order Service,还需选择“OpenFeign”。

用户服务(User Service)

pom.xml
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  9. </dependency>
  10. </dependencies>
application.yml
  1. spring:
  2. application:
  3. name: user-service
  4. server:
  5. port: 8081
  6. eureka:
  7. client:
  8. serviceUrl:
  9. defaultZone: http://localhost:8761/eureka/
  10. registerWithEureka: true
  11. fetchRegistry: true
UserController.java
  1. @RestController
  2. @RequestMapping("/users")
  3. public class UserController {
  4. @GetMapping("/{id}")
  5. public User getUser(@PathVariable Long id) {
  6. // 简化处理,实际应用中应从数据库获取数据
  7. return new User(id, "User " + id);
  8. }
  9. }
User Service 启动类
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  4. @SpringBootApplication
  5. @EnableDiscoveryClient // 启用Eureka客户端
  6. public class UserServiceApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(UserServiceApplication.class, args);
  9. }
  10. }

订单服务(Order Service)

pom.xml

除了上述User Service的依赖,还需添加Feign客户端支持:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>
application.yml
  1. spring:
  2. application:
  3. name: order-service
  4. server:
  5. port: 8082
  6. eureka:
  7. client:
  8. serviceUrl:
  9. defaultZone: http://localhost:8761/eureka/
  10. registerWithEureka: true
  11. fetchRegistry: true
  12. feign:
  13. client:
  14. config:
  15. default:
  16. connectTimeout: 5000
  17. readTimeout: 5000
OrderController.java
  1. @RestController
  2. public class OrderController {
  3. @Autowired
  4. private UserServiceClient userServiceClient;
  5. @GetMapping("/orders/{userId}")
  6. public String getOrderForUser(@PathVariable Long userId) {
  7. User user = userServiceClient.getUser(userId);
  8. return "Order for " + user.getName();
  9. }
  10. }
  11. #### UserServiceClient.java (Feign Client)
  12. @FeignClient(name = "USER-SERVICE")
  13. public interface UserServiceClient {
  14. @GetMapping("/users/{id}")
  15. User getUser(@PathVariable Long id);
  16. }
Order Service 启动类
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  4. import org.springframework.cloud.openfeign.EnableFeignClients;
  5. @SpringBootApplication
  6. @EnableDiscoveryClient // 启用Eureka客户端
  7. @EnableFeignClients // 启用Feign客户端支持
  8. public class OrderServiceApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(OrderServiceApplication.class, args);
  11. }
  12. }

创建 Eureka Server

创建一个新的Spring Boot项目,添加Eureka Server依赖:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  4. </dependency>

配置Eureka Server的application.yml:

  1. server:
  2. port: 8761
  3. eureka:
  4. instance:
  5. hostname: localhost
  6. client:
  7. registerWithEureka: false
  8. fetchRegistry: false
  9. serviceUrl:
  10. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

对于Eureka Server,同样需要一个启动类,但这里不需要额外的@EnableDiscoveryClient注解,因为Eureka Server本身不作为客户端注册到任何服务发现系统中。

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  4. @SpringBootApplication
  5. @EnableEurekaServer // 标识这是一个Eureka Server
  6. public class EurekaServerApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(EurekaServerApplication.class, args);
  9. }
  10. }

启动与验证

  1. 启动Eureka Server。
  2. 分别启动User Service和Order Service。
  3. 访问Eureka Server的Web界面(默认http://localhost:8761),确保两个服务都已成功注册。
  4. 测试服务间调用,例如访问http://localhost:8082/orders/1,验证Order Service是否能通过Feign从User Service获取用户信息。

这便是一个简单的基于Spring Cloud的微服务交互示例。

在实际项目中,还需考虑错误处理、日志记录、安全性、配置中心等更复杂的配置与实现。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号