前言
谷粒商城分布式基础篇,涉及到很多Spring Cloud Alibaba的基础知识,我就不在笔记里详细介绍了。可以参考我的另一篇文章,对Spring Cloud Alibaba及其相关组件做了非常详细的介绍和使用说明。
Spring Cloud Alibaba Nacos
Spring Cloud Alibaba服务注册以及配置中心:Nacos
Nacos服务
下载Nacos
👇下载链接👇
解压下载到的Nacos包并执行bin目录中的运行命令
访问:[YourHost]:8848/nacos
默认账号密码:nacos/nacos
集成Nacos到项目
此步骤所有微服务都需要做
新增依赖
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>配置文件新增配置
1
2
3
4
5
6
7
8
9spring:
cloud:
nacos:
discovery:
# nacos地址
server-addr: 127.0.0.1:8848
# 当前应用名称
application:
name: gulimall-couponSpring Boot启动类新增
@EnableDiscoveryClient
注解启动并观察Nacos管理界面中的服务列表中是否有应用注册
Feign声明式远程调用
编写测试Feign调用
引入依赖(查看是否以引入,以引入不需要再次引入)
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>在
gulimall-coupon
服务中加入新API在
CouponController
中添加API1
2
3
4
5
6
7
8
9"/member/list") (
public R list() {
List<CouponEntity> list = new ArrayList<>();
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("优惠券: 满100减10");
list.add(couponEntity);
return R.ok().put("data", list);
}在
gulimall-member
中编写Feign Client1
2
3
4
5
6
7
8
9
10
11package com.imxushuai.gulimall.member.feign;
import com.imxushuai.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
"gulimall-coupon") (
public interface CouponFeignService {
"coupon/coupon/member/list") (
public R list();
}在
gulimall-member
的启动类中使用@EnableFeignClients
注解开启允许Feign Client远程调用在
gulimall-member
中编写API并远程调用gulimall-coupon
中的API1
2
3
4
5
6
7
8
9
10
11
private CouponFeignService couponFeignService;
"/coupons") (
public R test() {
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R list = couponFeignService.list();
return R.ok().put("member", memberEntity).put("coupons", list);
}重启
gulimall-member
和gulimall-coupon
服务访问API进行测试
成功获取到数据,远程调用API成功
Nacos Config 配置中心
使用Spring Cloud Alibaba Nacos作为配置中心。
默认Nacos已经安装并运行。
简单使用
引入依赖
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>添加
bootstrap.properties
配置文件1
2spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848在Nacos的配置文件中添加
gulimall-coupon.properties
配置文件,内容如下1
2coupon.user.name=zhangsan
coupon.user.age=19编辑测试的API
1
2
3
4
5
6
7
8
9"${coupon.user.name}") (
private String name;
"${coupon.user.age}") (
private Integer age;
"test") (
public R testConfig() {
return R.ok().put("name", name).put("age", age);
}在使用配置文件中的配置的类上加入
@RefreshScope
注解重启服务并调用API测试,若成功再修改配置中心的配置文件中的值再次调用查看是否变化
多配置文件
将已有的application.yml拆分为多个配置文件,如:
coupon-other.yml:管理coupon专属配置
mybatis.yml:管理mybatis相关配置
datasource.yml:管理数据库连接相关配置
只需要修改bootstrap.yml
(用bootstrap.properties也行,我习惯使用yaml格式)
1 | spring: |
Spring Cloud Gateway
Spring Cloud提供的API网关:Spring Cloud Gateway
创建Module子工程,名称为
gulimall-gateway
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.imxushuai.gulimall</groupId>
<artifactId>gulimall-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-gateway</name>
<description>谷粒商城-网关服务</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.imxushuai.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>启动类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.imxushuai.gulimall.gulimallgateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}application.yml
1
2
3
4
5
6
7
8
9spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-gateway
server:
port: 88bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 命名空间ID, 根据具体ID替换
namespace: cad8d252-b4a6-4634-9ef2-5e963d361395
ext-config:
- data-id: routing.yml
group: DEFAULT_GROUP
refresh: true在Nacos配置中心配置
routing.yml
需要提前创建gateway使用的配置中心命名空间
1
2
3
4
5
6
7
8
9
10
11
12spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url, baidu
- id: qq_route
uri: https://www.qq.com/
predicates:
- Query=url, qq启动并访问测试
前端基础开发与入门
ES6和VUE,大致的内容我都会,所以这里就不写笔记了,用的时候能搜到就行了。