项目模块
优惠卷服务(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