当前位置:   article > 正文

SpringCloud微服务架构项目基本实现思路梳理(后续有新的继续更新)_springcloud微服务架构完整流程、设计思路

springcloud微服务架构完整流程、设计思路

2023.2.14

  1. SpingCloud架构项目其实就是一堆springboot项目各自做了微服务相关的配置,实现相互调用了统一治理。比如:把自己注册到注册中心(Eureka),说明自己在注册中心的服务名。

  1. 基本流程:

前端服务器按照接口发起请求(比如vue)-nginx(把存放的静态页面资源返回给浏览器)--网关(zuul)-eureka(去上面根据请求路径找对应的微服务)-具体处理业务的微服务-再把结果一次返回,指导返回给前端页面展示

  1. 前端接口请求地址第一层一般是服务在网关上的映射名(在application.yml中配置),通过映射关系,网关找到该服务在Eureka上注册的服务名。再由Eureka找到真实的微服务,根据第二层的接口路径找到对应的controller进行相应的业务处理。

  1. 其他相关组件:Ribbon负载均衡,在微服务pom文件中配置引入使用,默认为轮询模式。

feign:实现远程调用。同样需要在pom中配置引入。实现调用其他微服务中的方法。

5、如果要调用同项目下其他微服务中的类(工具类),也同样可以在pom中引入,这种相当于是本地调用了。

2.26

1、nginx一般作为网站的第一入口,nginx先把首页展现给用户,首页原本是静态页面,但其中动态部分包含vue请求。nginx配置了前端服务端口,首页路径,以及按目录存放各个微服务的静态页面。只需要把首页展示给用户,后续内容呈现和跳转就交给前端服务器解决。

3.30

用户登录认证一般实现思路:

  1. 用户登录成功时,将生成一个key,存入redis。并在本地cookies中也保存该key

  1. 后续用户请求系统所有的接口时,都会从本地cookies中取到key,并在请求内容中带上这个key

  1. 网关负责拦截所有请求,校验请求是否带有key,后台拿这个key和redis进行比较,验证是否存在该用户信息

  1. 如果校验通过则说明用户已经登录,可以正常执行后续操作。否则就转到未登录的操作。

4.7

  1. springboot默认实现了线程隔离,当多个用户访问一个服务时,每个用户各自使用一个线程。如果使用到类的全局变量(包括spring管理的bean),则会各自使用一份初始拷贝,互不影响。

  1. redis缓存:数据库查询使用缓存时,需要注意其他对数据库改动的操作是否会影响缓存,如果有影响,需要对缓存进行更新或者清楚。

7.13

Feign的使用:SpringCloud Feign使用_liucy007的博客-CSDN博客

实现微服务之间的调用:

  1. 如果A要调用服务B的接口,A工程中添加依赖:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

  1. 则A需要把B的服务接口信息在自己内部进行声明。也就是将B的接口信息在自己工程中进行映射。

name:调⽤的服务名称,和服务提供者yml⽂件中spring.application.name保持⼀致

path: 定义当前FeignClient的统一前缀

@FeignClient(name = "edu-ad-boot",path = "/ad")

public interface AdRemoteService {

调用请求路径

@GetMapping("/space/getAllSpace")

List<PromotionSpaceDTO> getAllSpace();

@GetMapping("/space/getSpaceById/{spaceId}")

PromotionSpaceDTO getSpaceById(@PathVariable(value = "spaceId") int id);

}

  1. A⼯程启动类使⽤注解@EnableFeignClients添加Feign⽀持

@SpringBootApplication

@EnableDiscoveryClient //开启服务发现,注册到注册中心

@EnableFeignClients("com.lagou.edu") //实现远程调用,指定远程包

public class FrontApplication {

public static void main(String[] args){

SpringApplication.run(FrontApplication.class,args);

}

}

8.11

1、gateway配置说明:

server:
  port: 8080
spring:
  application:
    name: api-gateway-server
  cloud:
    gateway:
      routes:
        - id: product-service  # 路由 id,唯一标识
          uri: http://localhost:9002
          predicates:
            - Path=/product/**  # 断言,路由匹配条件,匹配 /product 开头的所有 api
        - id: order-service
          uri: lb://order-service  # 微服务名称,lb:// 表示根据微服务名称从注册中心拉去服务请求路径
          predicates:
            - Path=/order2/**  # 断言,路由匹配条件,匹配 /order2 开头的所有 api
          filters: #如果不加这个,那么所调服务的真实controller路径前缀必须和path
            - RewritePath=/order2(?<segment>/?.*), $\{segment} #表示order2后面部分是对应服务真实controller路径

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/364107
推荐阅读
相关标签
  

闽ICP备14008679号