程序员的资源宝库

网站首页 > gitee 正文

Spring Cloud Alibaba 商城项目(1)

sanyeah 2024-04-13 16:15:05 gitee 7 ℃ 0 评论

项目模块

优惠卷服务(shop-counpon)、商品服务(shop-goods)、用户服务(shop-user)、订单服务(shop-order)、仓储服务(shop-storage)。

初始项目

  1. 创建结构
    在这里插入图片描述

  2. 选择依赖(springboot v 2.1.8.RELEASE & Spring Cloud v Greenwich.SR3)
    在这里插入图片描述
    其他模块以此类推不在重复操作。

  3. 创建各个模块的数据库

  4. 引入人人后台代码和前端代码,能运行起来就行,可以参考部署文档。

  5. 创建公共依赖模块shop-common

  6. 使用人人代码生成器快速生成项目基础代码
    更换为需要生成代码的库
    在这里插入图片描述
    修改配置信息 在这里插入图片描述
    删除Shiro的权限依赖还有删除更改接口的shiro没有截图全切记
    在这里插入图片描述

    然后运行项目生成代码,依次导入对应的项目模块中。
    在这里插入图片描述

  7. 增加各个服务的基本配置以此类推
    在这里插入图片描述
    在这里插入图片描述
    运行测试成功
    在这里插入图片描述

Spring Cloud Alibaba Nacos 注册中心

  1. 在Shop-Common模块添加依赖
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  1. 在Shop-Common模块添加Nacos注册中心依赖
      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
  1. 下载Nacos服务 并运行nacos-server。如果启动报错请修改运行模式为单机运行

set MODE="standalone"

  1. 修改配置文件注册中心地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
  # 各个模块的服务名
    name: shop-coupon
  1. 在每个模块的启动类上面增加注册中心客户端注解

@EnableDiscoveryClient

  1. 项目启动访问注册成功
    在这里插入图片描述
  2. 其它模块以此类推进行注册配置
    在这里插入图片描述

Spring Cloud Feign远程调用

  1. 创建一个专供远程调用目录Feign(因为spring cloud 采用的是声明式调用)

  2. 编写远程调用接口

 package com.fyx.shop.shopuser.feign;

import com.baomidou.mybatisplus.extension.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

//注册中心的服务名
@FeignClient(value = "shop-coupon")
public interface CouponFeignService {

    @RequestMapping("/shopcoupon/coupon/list")
    public R list(@RequestParam Map<String, Object> params);
}
  1. 在会员中心调用优惠卷列表并返回
    @Autowired
    private CouponFeignService couponFeignService;

    @GetMapping("/mycoupin")
    public R list() {
        HashMap<String, Object> objectObjectHashMap = Maps.newHashMap();
        objectObjectHashMap.put("page", 0);
        objectObjectHashMap.put("size", 10);
        return couponFeignService.list(objectObjectHashMap);
    }
  1. 在启动类添加注解开启远程调用
//填写当前项目远程调用包路径
@EnableFeignClients("com.fyx.shop.shopuser.feign")

Spring Cloud Alibaba Nacos配置中心

  1. common模块引入配置中心依赖
    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  1. 在需要配置中心模块下的SpringBoot Resources 模块下创建bootstrap.yml(优先级高于application.yml)
  2. 填写配置信息
spring:
  application:
    #服务名
    name: shop-coupon
  cloud:
    nacos:
      config:
        #配置中心地址,nacos地址
        server-addr: 127.0.0.1:8848
        #默认读取nacos的配置文件后缀名
        file-extension: yml
  1. 进入nacos配置中心配置列表添加 以服务名+后缀名作为Data Id
    在这里插入图片描述

  2. 测试配置中心代码是否生效

注意:需要实时获取配置需要在当前类上面增加@RefreshScope 注解

    @Value("${person.name}")
    private String name;
    @Value("${person.name}")
    private Integer age;

    @RequestMapping("/testconfig")
    public R list() {
        R ok = R.ok();
        ok.put("name", name);
        ok.put("age", age);
        return ok;
    }

配置中心的概念

命名空间

以配置中心举例主要作用是用来做服务隔离,是读会员中心的配置呢,还是读商品中心的配置呢

  1. 进入配置中心,创建命名空间
    在这里插入图片描述
  2. 在bootstrap.yml文件中之指定使用的命名空间配置
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        #命名空间
        namespace: 939a484c-f529-412a-9fe9-c4f8370283a0

配置分组

配置分组是在命名空间下的进一步隔离,你是要读会员中心命名空间下开发环境的配置文件呢,还是生产环境的配置呢

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        group: dev

常用的使用方法是命名空间用来做服务隔离,配置分组用来做环境隔离

配置集

就是值所有的配置i集合

配置集ID

就是值配置文件的名称

Spring Cloud Gateway 网关

三大核心

  1. Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由

  2. Predicate(断言):参考的是java8的java.util.function.Predicate开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理

  3. Filter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

项目搭建

  1. 搭建项目
    在这里插入图片描述
  2. 引入gateway依赖
    在这里插入图片描述
  3. 引入common模块中的配置中心和注册中心
<dependency>
			<groupId>org.fyx.shop</groupId>
			<artifactId>shop-common</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
  1. 启动类开启注册中心服务发现

@EnableDiscoveryClient

  1. 删除自动生成的配置文件,创建bootstrap.yml文件,进入nacos创建相应的命名空间和分组
spring:
  application:
    name: shop-gateway
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        namespace: f176f0a9-ee0b-4de6-bf0c-545be48a780d
        group: dev
  1. nacos配置文件信息
    在这里插入图片描述

  2. 排除数据库的自动配置,因为common引入了数据库的依赖,而网关不需要数据库

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

  1. 配置路由规则
spring:
  application:
    name: shop-gateway
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        namespace: f176f0a9-ee0b-4de6-bf0c-545be48a780d
        group: dev
    # 路由配置 意思值如果微服务的请求路径参数有path并且值等于baidu的测访问 https://www.baidu.com 这个官网
    gateway:
      routes:
        - id: baidu_id
          uri: https://www.baidu.com
          predicates:
            - Query=path,baidu

        - id: qq_id
          uri: https://www.qq.com
          predicates:
            - Query=path,qq

在这里插入图片描述

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表