Spring Cloud Alibaba 商城项目(1)
项目模块
优惠卷服务(shop-counpon)、商品服务(shop-goods)、用户服务(shop-user)、订单服务(shop-order)、仓储服务(shop-storage)。
初始项目
- 
创建结构 
  
- 
选择依赖(springboot v 2.1.8.RELEASE & Spring Cloud v Greenwich.SR3) 
  
 其他模块以此类推不在重复操作。
- 
创建公共依赖模块shop-common 
- 
使用人人代码生成器快速生成项目基础代码 
 更换为需要生成代码的库
  
 修改配置信息 
 删除Shiro的权限依赖还有删除更改接口的shiro没有截图全切记
  然后运行项目生成代码,依次导入对应的项目模块中。 
  
- 
增加各个服务的基本配置以此类推 
  
  
 运行测试成功
  
Spring Cloud Alibaba Nacos 注册中心
- 在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>
- 在Shop-Common模块添加Nacos注册中心依赖
      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
- 下载Nacos服务 并运行nacos-server。如果启动报错请修改运行模式为单机运行
set MODE="standalone"
- 修改配置文件注册中心地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
  # 各个模块的服务名
    name: shop-coupon
- 在每个模块的启动类上面增加注册中心客户端注解
@EnableDiscoveryClient
- 项目启动访问注册成功
  
- 其它模块以此类推进行注册配置
  
Spring Cloud Feign远程调用
- 
创建一个专供远程调用目录Feign(因为spring cloud 采用的是声明式调用) 
- 
编写远程调用接口 
 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);
}
- 在会员中心调用优惠卷列表并返回
    @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);
    }
- 在启动类添加注解开启远程调用
//填写当前项目远程调用包路径
@EnableFeignClients("com.fyx.shop.shopuser.feign")
Spring Cloud Alibaba Nacos配置中心
- common模块引入配置中心依赖
    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
- 在需要配置中心模块下的SpringBoot Resources 模块下创建bootstrap.yml(优先级高于application.yml)
- 填写配置信息
spring:
  application:
    #服务名
    name: shop-coupon
  cloud:
    nacos:
      config:
        #配置中心地址,nacos地址
        server-addr: 127.0.0.1:8848
        #默认读取nacos的配置文件后缀名
        file-extension: yml
- 
进入nacos配置中心配置列表添加 以服务名+后缀名作为Data Id 
  
- 
测试配置中心代码是否生效 
注意:需要实时获取配置需要在当前类上面增加@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;
    }
配置中心的概念
命名空间
以配置中心举例主要作用是用来做服务隔离,是读会员中心的配置呢,还是读商品中心的配置呢
- 进入配置中心,创建命名空间
  
- 在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 网关
三大核心
- 
Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由 
- 
Predicate(断言):参考的是java8的java.util.function.Predicate开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理 
- 
Filter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。 
项目搭建
- 搭建项目
  
- 引入gateway依赖
  
- 引入common模块中的配置中心和注册中心
<dependency>
			<groupId>org.fyx.shop</groupId>
			<artifactId>shop-common</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
- 启动类开启注册中心服务发现
@EnableDiscoveryClient
- 删除自动生成的配置文件,创建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
- 
nacos配置文件信息 
  
- 
排除数据库的自动配置,因为common引入了数据库的依赖,而网关不需要数据库 
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- 配置路由规则
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


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号